Rails搜索Ransack NoMethodError

时间:2017-10-19 21:20:39

标签: ruby-on-rails ruby-on-rails-5 ransack nomethoderror search-form

这个应用程序有2个模型,一个农场has_many作物。我们正在尝试使用ransack在Farm#show上进行搜索。控制器中的show动作如下所示:

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

Farm#show视图包含以下表单:

<%= 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#show
  未定义的方法`crops_path&#39;

这里缺少什么?

1 个答案:

答案 0 :(得分:0)

因为默认情况下,rankack搜索会转到索引操作,您可以在其文档中看到crops_path,此处您必须编写单独的搜索操作。或者你可以这样做

1-修改您的节目操作并仅将@q定义为搜索变量

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

2-为搜索创建单独的操作ex-

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

为search_crops定义网址

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

4 in farms/show.html.erb在搜索与农场相关的作物之前发送隐藏字段id以获取农场

<%= 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 %>
@crops行动中获取search_crops之后

5-所以您可以为show.html.erb以及search_crops.html.erb制作公共部分 并显示搜索结果。您可以相应地修改您的代码