簡體   English   中英

在rails“獲取'vendors / keyword_search',到:'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>

單擊“關鍵字搜索”鏈接后,似乎出現了我的問題。 我的路徑助手vendors_keyword_search_path嘗試運行vendors_keyword_search_path vendors#show而不是運行vendor vendors#keyword_search並加載' /views/vendors/keyword_search.html.erb '模板,從而導致出現以下錯誤消息(請注意所包含的堆棧跟蹤的第一行):

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

謝謝

Rails按順序處理路線。 因此,它將供應商/關鍵字搜索與供應商#顯示匹配,因為這是路由中的第一個“匹配”。 然后,它將keyword_search視為顯示路線的:id參數。

因此,應將您的keyword_search路線放置在資源上方。

更改路由文件中的以下行后嘗試

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

match "vendors/keyword_search" => "vendors#keyword_search", :as => :vendors_keyword_search_path

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM