Rails - 从字符串数组中下拉

Hom*_*ith 11 forms ruby-on-rails drop-down-menu

我有这样一个数组:

['New York', 'Los Angeles']
Run Code Online (Sandbox Code Playgroud)

我希望能够以这样的形式生成带有这些值的select /选项:

<%= form_tag filter_city_path, :method=> get do %>
  <%= select_tag "city", @list_of_cities %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.如您所见,我想将选择作为城市传递给网址.

nar*_*ren 15

你需要使用options_for_select helper之类的

<%= select_tag "city", options_for_select([['New York' ,'New york'], ['Los Angeles', 'Los Angeles']]) %>
Run Code Online (Sandbox Code Playgroud)

  • 只要有可能,尝试以编程方式转换数组,而不是长时间拼写它们.你已经说明了为什么在第二次不利用'york'时.`cities.collect {| c | [c,c]}`会做扩展它的工作. (7认同)

Jer*_*emy 6

我的方法是将数组构建为模型中的常量,强制确认常量中列出的选项,然后从视图中调用它

class Show < ApplicationRecord

  DAYS = [ "monday", "tuesday", "wednesday", "thursday","friday", "saturday","sunday"]

  validates :day, inclusion: DAYS

end
Run Code Online (Sandbox Code Playgroud)

如果您希望在没有内容的情况下提交该字段的选项,您还必须在验证中调用 `allow_blank: true'。设置完成后,您可以调用常量来填充表单中的视图,如下所示:

<%= select_tag "day", options_for_select(Show::DAYS) %>
Run Code Online (Sandbox Code Playgroud)

或者

<%= select_tag "day", options_for_select(Show::DAYS.sort) %>
Run Code Online (Sandbox Code Playgroud)

如果你想要它预先排序(这对一周中的几天没有意义......)