【问题标题】:Rails Search Ransack NoMethodErrorRails Search Ransack NoMethodError
【发布时间】:2017-10-19 21:20:39
【问题描述】:

此应用有 2 个模型,一个 Farm has_many Crops。我们正在尝试使用 ransack 在 Farm#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'

这里缺少什么?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    2- 为搜索前创建一个单独的操作-

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

    3- 定义 search_crops 的 url

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

    4- 在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 %>
    

    5- 所以在从search_crops 操作获得@crops 之后,您可以为show.html.erbsearch_crops.html.erb 设置共同部分 并显示搜索结果。您可以相应地修改您的代码

    【讨论】:

      猜你喜欢
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      相关资源
      最近更新 更多