Rails4:来自数组的collection_check_boxes

时间:2017-03-31 20:02:37

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

有一种方法可以从一个常量序列化collection_check_boxes吗? 像这样:

# model
class tutorial < ActiveRecord::Base
  serialize :option
  TYPES = ["Option 1", "Option 2", "Option 3"]
end

# view
<%= form_for(@tutorial) do |b| %>
  <%= f.collection_check_boxes(:option, Tutorial::TYPES, :id, :name) do |b| %>
         <%= b.label class:"label-checkbox" do%>
         <%=b.check_box + b.text%>
      <%end%>
   <% end %>
<% end %>

或者只是:

<%= f.collection_check_boxes :option, Tutorial::TYPES, :id, :name %>

当我尝试两者时,我收到错误:

undefined method `id' for "Option\t1":String

我的许可参数已经设置为option: []

之前有人这样做了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

定义是:

collection_check_boxes(method, collection, value_method, text_method, options = {}, html_options = {}, &block)`

第一个是发送方法,第二个是集合,第三个是调用设置选项值property的方法,第四个是调用获取文本的方法并将其作为选项的标签。

<%= f.collection_check_boxes :option, Tutorial::TYPES, :id, :name %>

您正在使用Tutorial::TYPES(如果是字符串的数组)作为集合,并在每个字符串上调用idname方法。

您的收藏品应该是Tutorial.all,要获得标签,您应该在Tutorial对象上实现一个方法,例如:

enum type: [
  :type1,
  :type2,
  :type3,
]

并像这样使用它:

<%= f.collection_check_boxes :option, Tutorial.all, :id, :type %>