如何在Rails的select_tag参数前追加并显示指定文本?
解决方案
直接修改年份下拉框的options_for_select生成逻辑,给每个年份的显示文本加上Year: 前缀即可:
把原代码中
collect{ |u| [u.season_year] }部分,改成collect{ |u| ["Year: #{u.season_year}", u.season_year] }。这里options_for_select的每个选项是[显示文本, 提交值]的数组,修改后下拉框显示带前缀的文本,提交的参数值还是原年份数字,不会影响后台逻辑。修改后的完整代码:
<%= form_tag results_path, :method => 'get' do %> <%= select_tag :season_year, options_for_select(@tournaments.order(season_year: :desc).collect{ |u| ["Year: #{u.season_year}", u.season_year] }.uniq, session[:season_year]), class: "btn btn-outline-primary", :onchange => "this.form.submit();" %> <%= select_tag :tournament, options_for_select(@tournaments_filtered.order(tournament_date: :desc).collect{ |u| [u.lake_name, u.id] }, session[:tournament]), class: "btn btn-outline-primary", :onchange => "this.form.submit();" %> <%= select_tag :table_select, options_for_select(@result_options, session[:table_select]), class: "btn btn-outline-primary", :onchange => "this.form.submit();" %> <% end %>
如果需要额外添加一个默认提示选项(比如“选择年份”),可以在选项数组最前面拼接一个默认项:
options_for_select([["请选择年份", nil]] + @tournaments.order(season_year: :desc).collect{ |u| ["Year: #{u.season_year}", u.season_year] }.uniq, session[:season_year])
内容的提问来源于stack exchange,提问作者railsnoob
相关产品推荐
相关产品推荐

