2011-08-17 36 views
2

我創建瞭如下的下拉菜單佈局。如何使用帶有Ajax的下拉框在Rails中渲染部分內容?

<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

顯示應用程序/視圖/事件/ find_search.html.erb其中第10行中提出:

你有一個零對象時,你沒想到吧! 您可能預期了Array的一個實例。 評估nil時發生錯誤012每分鐘

我該怎麼辦?任何人可以幫助我>

+0

也提供了`app/views/events/find_search.html.erb`的代碼。 – rubyprince 2011-08-17 12:16:14

+0

如果您計劃在view..events中使用該變量是一個局部變量並且無法在視圖中訪問,您應該在`find_search`方法中使用`@ events`而不是`events` ... – rubyprince 2011-08-17 12:29:13

回答

1

不知道這是它 - 但是下面一行有一個錯誤

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

我在生產這方面的工作:

<% 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 => {:動作=> 「youractionhere」}和還有{:onchange =>「this.form.submit();」}。當然,這個動作應該在被調用時呈現部分。

相關問題