【问题标题】:Ruby-on-rails, select_tag and options_from_collection_for_select with selected item after reload pageRuby-on-rails、select_tag 和 options_from_collection_for_select 与重新加载页面后的选定项目
【发布时间】:2014-01-24 06:59:21
【问题描述】:

我没有在带有选项 :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 中有选项,但所选数据未显示在所选数据中。 'All Airlines' 再次显示在 Select_tag 中。

如何在 Select_tag 中显示我的数据?

【问题讨论】:

    标签: ruby-on-rails onchange html-select


    【解决方案1】:

    方法options_from_collection_for_select 接受一个可选的selected 参数,它将&lt;option&gt; 标记为选中。按如下方式更新您的代码:

    <%= 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,而只需在一个地方进行更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多