Как я могу использовать выпадающий список с Ajax для рендеринга партиала в Rails? - PullRequest
2 голосов
/ 17 августа 2011

Я создал макеты выпадающего меню следующим образом.

 <select name="search" id="search" >
            <option value="0">Please select</option>
            <option value="1">Name</option>
            <option value="2">Trainer</option>
            <option value="3">Venue</option>
            <option value="4">Date</option>
           </select>

    <div id="div_to_be_updated" style="float:right"></div>

        <%= observe_field 'search',
        :update => 'div_to_be_updated',
        :url => {:controller => 'events', :action=> 'find' },
        :with => "'is_delivery_address=' + escape(value)" %>

Затем я создал метод find в моем контроллере.

def find

if params[:is_delivery_address] == "1" || "2" || "3" 

render :partial => 'layouts/new_search' 

else
 render :partial => 'layouts/nothing' 

end
end

Затем я создал частичное имя _new_search.

<span style="text-align: right">
<% form_tag "/events/find_search" do %>
<%= text_field_tag :search_string%>
<%= submit_tag "search" %>
<%end%>
</span>

Снова я создал метод find_search в контроллере.

def find_search
events=Event.find(:all, :conditions=>["venue = ?", params[:search_string]])
end

Тогда я создал страницу просмотра. Но когда я искал что-то, это даст исключение.

NoMethodError в событиях # find_search

Отображение app / views / events / find_search.html.erb, где поднята строка # 10:

У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр Array. Произошла ошибка при оценке nil.each

Что мне делать? Кто-нибудь может мне помочь>

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Не уверен, что это так - но в следующей строке есть ошибка

if params[:is_delivery_address] == "1" || "2" || "3" 

это всегда будет верно, так как if params[:is_delivery_address] != "1", тогда результатом будет "2" (не ноль - то есть истина).

Попробуйте irb проверить:

> params = {:is_delivery_address => "0" }
> params[:is_delivery_address] == "1" || "2" || "3" 
=> "2"
0 голосов
/ 17 августа 2011

У меня это работает в производстве:

<% form_for :youractionhere, :url => { :action => "youractionhere", :param1 => @market, :param2 => @param2 } do |f| %>
  <%= select_tag :search, options_from_collection_for_select(@search_options, "search_option_name", :search_option_name, :search_option), { :onchange => "this.form.submit();" } %>
              <% end %>

Ключ должен содержать: url => {: action => "youractionhere"}, а также {: onchange => "this.form.submit ();"}. Действие, конечно, должно отображать частичное при вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...