在 rails "get 'vendors/keyword_search', to: 'vendors#keyword_search'" 中运行“'vendors#show'”
In rails "get 'vendors/keyword_search', to: 'vendors#keyword_search'" runs "'vendors#show'"
在 rails 应用程序中,我正在尝试设置到关键字搜索页面的路径。我正在尝试通过以下测试:
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
<div class='col-xs-3'>
<p><%= link_to 'Keyword search', vendors_keyword_search_path %></p>
</div>
在/routes.rb
root to: 'homepage#index'
resources :buyers, :vendors
get 'vendors/keyword_search', to: 'vendors#keyword_search'
在/controllers/vendors_controller.rb
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 具有以下内容:
<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>
我的问题似乎是在点击 'Keyword search' link 之后出现的。而不是 运行ning vendors#keyword_search
并加载 '/views/vendors/keyword_search.html.erb' 模板,我的路径助手 vendors_keyword_search_path
尝试到 运行 vendors#show
导致以下错误消息(注意包括堆栈跟踪的第一行):
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'
对此的帮助将不胜感激,但最重要的是我真的很想了解为什么它是 运行ning show
而不是 keyword_search
.
谢谢
更改路由文件中的以下行后尝试
get 'vendors/keyword_search', to: 'vendors#keyword_search'
至
match "vendors/keyword_search" => "vendors#keyword_search", :as => :vendors_keyword_search_path
Rails 按顺序处理路由。因此它将 vendors/keyword_search 与 vendors#show 匹配,因为这是路由中的第一个 "match"。然后它将 keyword_search 视为显示路由的 :id 参数。
因此,您应该将 keyword_search 的路线放在资源上方。
在 rails 应用程序中,我正在尝试设置到关键字搜索页面的路径。我正在尝试通过以下测试:
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
<div class='col-xs-3'>
<p><%= link_to 'Keyword search', vendors_keyword_search_path %></p>
</div>
在/routes.rb
root to: 'homepage#index'
resources :buyers, :vendors
get 'vendors/keyword_search', to: 'vendors#keyword_search'
在/controllers/vendors_controller.rb
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 具有以下内容:
<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>
我的问题似乎是在点击 'Keyword search' link 之后出现的。而不是 运行ning vendors#keyword_search
并加载 '/views/vendors/keyword_search.html.erb' 模板,我的路径助手 vendors_keyword_search_path
尝试到 运行 vendors#show
导致以下错误消息(注意包括堆栈跟踪的第一行):
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'
对此的帮助将不胜感激,但最重要的是我真的很想了解为什么它是 运行ning show
而不是 keyword_search
.
谢谢
更改路由文件中的以下行后尝试
get 'vendors/keyword_search', to: 'vendors#keyword_search'
至
match "vendors/keyword_search" => "vendors#keyword_search", :as => :vendors_keyword_search_path
Rails 按顺序处理路由。因此它将 vendors/keyword_search 与 vendors#show 匹配,因为这是路由中的第一个 "match"。然后它将 keyword_search 视为显示路由的 :id 参数。
因此,您应该将 keyword_search 的路线放在资源上方。