首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails中,get‘供应商/关键字_search’,到:'vendors#keyword_search'“运行"'vendors#show'”

在rails中,get‘供应商/关键字_search’,到:'vendors#keyword_search'“运行"'vendors#show'”
EN

Stack Overflow用户
提问于 2016-11-21 15:54:03
回答 2查看 30关注 0票数 0

在rails应用程序中,我试图设置到关键字搜索页面的路径。我试图通过以下测试:

代码语言:javascript
复制
scenario 'can perform a keyword search' do
  click_link 'Search'
  click_link 'Keyword search'
  expect(current_path).to eq '/vendors/keyword_search'
  fill_in 'search', with: vendor_one.email
  click_button 'Search suppliers'
  expect(page).to have_content vendor_one.email
  expect(page).not_to have_content vendor_two.email
end

到目前为止,我已经:

/views/vendors/index.html.erb

代码语言:javascript
复制
<div class='col-xs-3'>
  <p><%= link_to 'Keyword search', vendors_keyword_search_path %></p>
</div>

/routes.rb

代码语言:javascript
复制
root to: 'homepage#index'

resources :buyers, :vendors

get 'vendors/keyword_search', to: 'vendors#keyword_search'

/controllers/vendors_controller.rb

代码语言:javascript
复制
class VendorsController < ApplicationController
  def index
    @vendors = Vendor.all
  end

  def show
    @vendor = Vendor.find(params[:id])
  end

  def keyword_search
  end
end

然后,我有了一个/views/vendors/keyword_search.html.erb,它包含以下内容:

代码语言:javascript
复制
<div id='main container' class='container-fluid'>
  <div class='row'>
    <div class='col-xs-3'>
    </div>
    <div class='col-xs-6'>
      <h1>suppliers#keyword_search</h1>
    </div>
    <div class='col-xs-3'>
    </div>
  </div>
</div>

我的问题似乎是在点击‘关键词搜索’链接。我的path助手vendors_keyword_search_path没有运行vendors_keyword_search_path并加载‘/views/path/关键字_search.html.erb’模板,而是尝试运行vendors#show,从而产生以下错误消息(请注意包括堆栈跟踪的第一行):

代码语言:javascript
复制
1) Buyers searching vendors can perform a keyword search
   Failure/Error: @vendor = Vendor.find(params[:id])

   ActiveRecord::RecordNotFound:
     Couldn't find Vendor with 'id'=keyword_search
   # ./app/controllers/vendors_controller.rb:7:in `show'

在这方面的帮助是非常感谢的,但最重要的是,我真的想了解为什么它运行的是show而不是keyword_search

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-21 16:04:10

Rails按顺序处理路由。因此,它将供应商/关键字_search匹配到vendors#show,因为这是路由中的第一个“匹配”。然后,它将keyword_search作为显示路由的:id参数。

因此,您应该将keyword_search路由置于资源之上。

票数 1
EN

Stack Overflow用户

发布于 2016-11-21 16:02:05

在更改路由文件中的下面一行后尝试

代码语言:javascript
复制
get 'vendors/keyword_search', to: 'vendors#keyword_search'

代码语言:javascript
复制
match "vendors/keyword_search" => "vendors#keyword_search", :as => :vendors_keyword_search_path
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40724200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档