在rails中填充动态/静态下拉菜单的正确方法是什么?

时间:2011-03-04 18:01:32

标签: ruby-on-rails-3

我一直想知道你们为填写rails中的下拉菜单做了什么,而没有在视图中溅出代码。你们做个转轴吗?你创建一个类并添加返回数组的方法吗?

我总是想知道其他人是如何使它们工作的,例如我需要用我创建一个名为DropDownFiller的类的所有国家填充组合框的另一种方法,并添加了一个名为fill_countries的方法,它将返回一个包含所有数组的数组国家。

关于此的最佳做法是什么或如何做?

1 个答案:

答案 0 :(得分:1)

帮助器options_for_select获取一系列选项并构建选择。来自文档:

options_for_select([["Dollar", "$"], ["Kroner", "DKK"]])
  <option value="$">Dollar</option>\n<option value="DKK">Kroner</option>

options_for_select([ "VISA", "MasterCard" ], "MasterCard")
  <option>VISA</option>\n<option selected="selected">MasterCard</option>

options_for_select({ "Basic" => "$20", "Plus" => "$40" }, "$40")
  <option value="$20">Basic</option>\n<option value="$40" selected="selected">Plus</option>

options_for_select([ "VISA", "MasterCard", "Discover" ], ["VISA", "Discover"])
  <option selected="selected">VISA</option>\n<option>MasterCard</option>\n<option selected="selected">Discover</option>

the documentation中有更详细的例子。

根据您的数据设置方式,可以轻松填写​​列表。例如:

options_for_select Country.select(:name).all.map { |c| c.name }

或自定义值

options_for_select Country.all.map { |c| [c.name, c.code] }

我见过的其他一些事情是在模型中定义一个返回正确值的辅助方法:

class Country
  # awesome country logic goes here!

  def self.array_for_select
    select(:name).all.map { |c| c.name }
  end
end

# a long time ago in a view far far away
options_for_select Country.array_for_select