在表单下拉列表中使用模型中的数组

时间:2014-04-21 15:44:14

标签: ruby-on-rails ruby ruby-on-rails-4

Ruby on Rails 4

在我的模特中,我有:

 @category_check = ['cables', 'printers', 'monitors', 'accessories', 'towers', 'interaction']

它用于验证,现在我想在我的表单中将数组显示为选项。这不起作用:

<%= f.label :category %><br>
<%= f.collection_select :category, @category_check, {prompt: "Select Category"}, class: "input-lg" %>

我是否必须在控制器中创建另一个实例变量,或者是否有办法在模型变量的下拉列表中显示每个变量?谢谢

3 个答案:

答案 0 :(得分:1)

您需要调用类似这样的内容

<%= f.collection_select :category, @category_check, :to_s, :to_s, {prompt: "Select Category"}, class: "input-lg" %>

这会将to_s传递给@category_check集合的每个元素。

答案 1 :(得分:1)

您应该能够通过模型访问该数组,假设您有一个实例化:

@my_model.category_check

然而,看起来这些类别是静态的,所以理想情况下它们是类级常量:

class MyModel

  CATEGORY_CHECK = ['cables', 'printers', 'monitors', 'accessories', 'towers', 'interaction']
end

然后你可以在任何地方访问它,而不需要该类的实例:

MyModel::CATEGORY_CHECK

正如Lalitharyani在他的回答中提到的,你还需要提供名称和值方法来调用数组的每个项目,以便表单助手知道要显示的内容。

答案 2 :(得分:0)

您可能在方法调用中缺少一个参数:

<%= f.collection_select :category, @category_check, {prompt: "Select Category"}, class: "input-lg" %>

应该是:

<%= f.collection_select :category, :category_id, @category_check, {prompt: "Select Category"}, class: "input-lg" %>