簡體   English   中英

重新加載頁面后,Ruby-on-rails,select_tag和options_from_collection_for_select以及選定的項目

[英]Ruby-on-rails, select_tag and options_from_collection_for_select with selected item after reload page

我沒有在帶有選項:onchange的options_from_collection_for_select的select_tag中顯示所選數據。

我有這個表格

<%= form_tag "/airports/#{@airport.id}/board_out/", :method => 'get', :id => "timetableaps_search", :prompt => "" do %>
  <%= @selected  = params[:search]%>
  <%= select_tag "search_al", options_from_collection_for_select(@t.map(&:aircompany).uniq.sort_by(&:airline_name), :id, :airline_name), :selected => params[:search_al], prompt: "All Airlines", :onchange => "this.form.submit();"%>
  <%= select_tag "search_ap", options_from_collection_for_select(@t.group("apname").order("cityname"),"way_end", "apname"), prompt: "All Airports", :onchange => "this.form.submit();" %>
  <%= submit_tag "Search", :name => nil %>
<% end %>

我選擇“ Aircompanies”(“ search_al”)。 頁面重新加載,因為我在select_tag:onchange中有選項,但是所選數據未顯示在所選數據中。 “所有航空公司”再次顯示在Select_tag中。

如何在Select_tag中顯示數據?

options_from_collection_for_select方法接受一個可選的selected參數,該參數將<option>標記為選中。 如下更新代碼:

<%= form_tag "/airports/#{@airport.id}/tablo_out/", :method => 'get', :id => "timetableaps_sear$
  <%= @selected = params[:search]%>
  <%= select_tag "search_al", options_from_collection_for_select(@t.map(&:aircompany).uniq.sort_by(&:airline_name), :id, :airline_name, params[:search_al]), prompt: "All Airlines", onchange: "this.form.submit();"%>
  <%= select_tag "search", options_from_collection_for_select(@t.group("apname").order("cityname"),"way_end", "apname", @selected), prompt: "All Airports", onchange: "this.form.submit();" %>
  <%= submit_tag "Search", name: nil %>
<% end %>

有關更多信息,請參見API: http : //api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_from_collection_for_select


其他一些建議和建議:

選擇一種語法,並至少在同一文件/方法/塊/等中每次都使用它。 為什么? 看起來更干凈...示例:

:this => "that" vs this: "that"

盡可能從控制器使用虛擬屬性。為什么? 看起來更干凈,並且,如果您決定更改檢索@airlines的方式,則在控制器中進行操作然后在視圖中進行跟蹤會更容易。 例:

@t.map(&:aircompany).uniq.sort_by(&:airline_name) vs @airlines

出於個人喜好,我嘗試不使用onchange ,而是使用事件偵聽器將視圖和js分開。 為什么? 看起來更干凈,我可以在整個應用程序中重復使用相同的js,而只需在一個地方進行更改即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM