0

このアプリは2つのモデル、ファームhas_many Cropsがあります。私たちはFarm#showで検索するためにransackを使用しようとしています。コントローラでshowアクションは次のようになります。Rails Search Ransack NoMethodError

def show 
    @farm = Farm.find(params[:id]) 
    @q = @farm.crops.ransack(params[:q]) 
    @crops = @q.result(distinct: true) 
    end 

ファーム#ショーのビューは、このフォームが含まれています

<%= search_form_for @q do |f| %> 
    <div> 
    <%= f.label :croptype_cont, "Crop Name Contains:" %> 
    <%= f.text_field :croptype_cont %> 
    </div> 
<%= f.submit "search" %> 
<% end %> 

すべては右の私には見えますが、我々はこのエラーを取得し続ける - それは最初を強調します検索フォームのライン:

農場#ショーでNoMethodError
未定義のメソッド `crops_path」

ここには何が欠けていますか?

答えて

0

デフォルトでは、ranksackの検索はインデックスアクションになります。そのドキュメントでは、crops_pathです。検索のために別のアクションを記述する必要があります。またはあなたがこの

の1-ようなあなたのshowアクションを変更して検索EX-

def search_crops 
    @farm = Farm.find(params[:id]) 
    @q = @farm.crops.ransack(params[:q]) 
    @crops = @q.result(distinct: true) 
end 

、3-定義するために別のアクションを作成するだけ@q検索変数

def show 
    @farm = Farm.find(params[:id]) 
    @q = @farm.crops.ransack(params[:q]) 
    end 

2 - などを定義しますすることができますsearch_cropsのURL

get 'search/farm/crops', to: 'farms#search_crops', as: :crops_search 

4-hidを送信そうsearch_cropsアクションから@cropsを取得した後あなたはresults.Youがあなたを変更することができshow.html.erbなどsearch_crops.html.erb と表示、検索のための部分的な共通作ることができるのいずれかの農場

<%= search_form_for @q, url: crops_search_path, :html => { :method => :get } do |f| 
    <%= f.hidden_field :id, value: params[:id] %> 
    <div> 
    <%= f.label :croptype_cont, "Crop Name Contains:" %> 
    <%= f.text_field :croptype_cont %> 
    </div> 
<%= f.submit "search" %> 
<% end %> 

5に関連した作物を検索する前に、ファームを取得するためデンフィールドidコードに応じて

関連する問題