2017-03-31 43 views
0

ある定数からcollection_check_boxesをシリアル化する方法はありますか?Rails4:配列からの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

定義である:

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

最初のものは、送信するための方法である、第二のコレクションである、第三のオプション値propertyを設定するために呼び出されるメソッドであり、第4は、このメソッドは、テキストを取得してオプションのラベルとして配置するために呼び出されます。そこ

<%= 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 %> 
+0

しかし、 'Tutorial.all'を使用して、私はモデルからクエリを実行します。これはまさに私がしたくないことです。 <%= f.select(:lang、options_for_select(User :: LANGS、@ user.lang)、{}、{})ヘルパーを使用するときと同じように、配列から呼び出す必要があります。 %> –

+0

@FernandoAureliano大丈夫なのですが、最後の2つの要素は ':id'と':name'ではいけません。コレクションの各要素で呼び出すメソッドなので、 ':id'と':id'を呼び出そうとしています。 ''オプション1 ":文字列'の上に 'name' 'TYPES'をキーまたは値がインデックスであるところのハッシュに変更することができ、そのように使うことができます:' <%= f.collection_check_boxes:option、Tutorial :: TYPES、:key、:value%> '。 –

+0

[1、 "オプション1"]、[2、 "オプション2"]、[3、 "オプション3"]] 'のような配列を使用して[1、 –

関連する問題