Използване на Rails 4 на немоделни атрибути в параметрите, което води до недефиниран метод „сливане“ за nil:NilClass

Имам формуляр за търсене на индексна страница за моя модел Properties, който използва както Ransack, така и Geocoder за търсене в полетата на модела Properties, както и стесняване на резултатите въз основа на разстоянието от адрес, въведен от потребителя във формата за търсене.

Адресът и разстоянието се записват във формата съответно с :nearaddress и :distance, които изпращам в params[:near]. Проверявам за присъствието им в действието на индекса на контролера след този отговор. Резултатът е „недефиниран метод `сливане' за 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

person UserDuser    schedule 03.12.2013    source източник


Отговори (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
person UserDuser    schedule 12.12.2013