2017-03-31 5 views
0

Es gibt eine Möglichkeit, eine collection_check_boxes von einer Konstanten zu serialisieren? Etwas wie folgt aus:Rails4: collection_check_boxes vom Array

# 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 %> 

Oder einfach:

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

Wenn ich beide es versuchen, erhalte ich die Fehlermeldung:

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

sind meine Erlaubnis Parameter bereits eingestellt mit option: []

Hat jemand so etwas schon mal gemacht?

Danke!

Antwort

1

Die Definition lautet:

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

Das erste Verfahren ist, zu senden, die zweite eine Sammlung ist, die dritte ist ein Verfahren, das eine Optionswert property einzustellen genannt wird, und die vierte ist eine Methode, die aufgerufen wird, um einen Text zu erhalten und ihn als Beschriftung für eine Option zu platzieren.

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

Es verwenden Sie Tutorial::TYPES (die ein Array, wenn Strings ist) als eine Sammlung, und id und name Methoden auf jeder Saite nennen.

Ihre Sammlung sollte Tutorial.all sein, und ein Etikett zu erhalten, sollten Sie eine Methode auf einem Tutorial Objekt für das, zum Beispiel implementieren:

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

Und es wie folgt verwenden:

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

Aber mit 'Tutorial.all' mache ich eine Abfrage vom Modell. Genau das möchte ich nicht machen. Was ich brauche ist, es aus dem Array aufzurufen, so wie wir es tun, wenn wir den Helper 'select' benutzen: <% = f.select (: lang, options_for_select (Benutzer :: LANGS, @ user.lang), {}, {}) %> –

+0

@FernandoAureliano Okay, dann sollten zwei letzte Elemente nicht ': id' und': name' sein, da dies Methoden sind, die Sie für jedes Element der Auflistung aufrufen, also versuchen Sie '' id' und ': Name' auf '" Option 1 ": String'. Sie können 'TYPES' in Hashwerte umwandeln, in denen Schlüssel oder Werte Indizes sind, und sie so verwenden:' <% = f.collection_check_boxes: option, Tutorial :: TYPES,: key,: value%> '. –

+0

Erhalte den gleichen Fehler 'undefinierter Methodenschlüssel 'für [1,' mit einem Array wie: '[[1," Option 1 "], [2," Option 2 "], [3," Option 3 "]] –

Verwandte Themen