【问题标题】:Rails 4 use of non-model attributes in params resulting in undefined method `merge' for nil:NilClassRails 4 在参数中使用非模型属性导致 nil:NilClass 的未定义方法“合并”
【发布时间】:2013-12-19 00:33:54
【问题描述】:

我的 Properties 模型的索引页面上有一个搜索表单,它使用 Ransack 和 Geocoder 来搜索 Properties 模型字段,并根据用户在搜索表单中输入的地址的距离缩小结果范围.

地址和距离分别以 :nearaddress 和 :distance 的形式捕获,我在 params[:near] 中发送。我正在this answer 之后的控制器索引操作中检查它们是否存在。当导航到 /properties 时,结果是“nil:NilClass 的未定义方法‘合并’”,因此视图不会呈现。如何使这些非模型表单参数正确传递给控制器​​?我认为这可能是一个强大的参数问题,但我被困在如何允许这些不在 Properties 模型中的属性上。该错误突出显示“f.text_field :nearaddress”行。

index.html.erb:
...form fields that work when excluding the two that follow...
<div class ="field">
  <%= f.label :nearaddress, "Address" %>
  <%= f.text_field :nearaddress, params[:near] %>
</div>
<div class ="field">
  <%= label_tag :distance %>
  <%= text_field_tag :distance, params[:near] %> miles
</div>
<div class="actions"><%= f.submit "Search" %></div>
<% end %>

properties_controller.rb:
def index
if params[:near].present? && (params[:near].to_i >0)
  @search = Property.near(params[:near]).search(params[:q])
else  
  @search = Property.search(params[:q])
end
  @properties = @search.result(:distinct => true).paginate(:page => params[:page])
  ...
end

【问题讨论】:

    标签: ruby-on-rails-4 strong-parameters ransack rails-geocoder


    【解决方案1】:

    我能够通过删除“f”来解决这个问题。并将“_tag”添加到 :nearaddress 字段以及在控制器索引中指定参数:

    <%= label_tag :nearaddress, "Near Address" %>
    <%= text_field_tag :nearaddress, params[:near] %>
    <%= label_tag :distance, "Distance From Address (mi)" %>
    <%= text_field_tag :distance, params[:near] %>
    <div class="actions"><%= f.submit "Search" %>
    <% end %>
    
    if params[:distance].present? && (params[:distance].to_i >0) && params[:nearaddress].present?
      @search = Property.near(params[:nearaddress],params[:distance]).search(params[:q])
    else  
      @search = Property.search(params[:q])
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多