2016-04-20 7 views
1

ich einen Fehler habe bei dem Versuch, collection_select zu verwenden;)Schienen collection_select meine Sammlung gedruckt werden soll

Ich habe diesen Code in meiner Sicht:

<%= f.collection_select(:channel, :channel_id, @channels, :id, :channelname, prompt: true) %> 

in meinem Controller Ich habe dies:

@channels = Channel.all 

und ich habe diesen Fehler:

undefined method `merge' for :channelname:Symbol 

Was ist mein Fehler?

Danke an alle!

+0

möglich Duplikat http://stackoverflow.com/questions/8147069/collection-select-method-gives-error-in-rails-3-1-1 oder http : //stackoverflow.com/questions/27136478/undefined-method-merge-for-namesymbol-rails-4-1-x-collection-select – margo

Antwort

1

Nach der Dokumentation:

collection_select(method, collection, value_method, text_method, options = {}, html_options = {}) public

So deshalb sollten Sie verwenden:

<%= f.collection_select(:channel_id, Channel.all, :id, :channelname, prompt: true) %> 
+0

Was ist der Unterschied zwischen meinem, meine @channels sollte die Sammlung haben oder nicht? – Felix

+1

Es gibt keinen Unterschied. Sie können @channels wie in Ihrem Beispiel verwenden. – hypern

+0

zusätzliche Frage, warum funktioniert das nicht: {prompt: t ("channel.add.prompt")} – Felix

1

können Sie verwenden, wie

Channel.all.pluck(:id, :channelname) 

Zum Beispiel bei unten schauen nehmen

collection_select(
    :post, # field namespace 
    :author_id, # field name 
    # result of these two params will be: <select name="post[author_id]">... 

    # then you should specify some collection or array of rows. 
    # It can be Author.where(..).order(..) or something like that. 
    # In your example it is: 
    Author.all, 

    # then you should specify methods for generating options 
    :id, # this is name of method that will be called for every row, result will be set as key 
    :name_with_initial, # this is name of method that will be called for every row, result will be set as value 

    # as a result, every option will be generated by the following rule: 
    # <option value=#{author.id}>#{author.name_with_initial}</option> 
    # 'author' is an element in the collection or array 

    :prompt => true # then you can specify some params. You can find them in the docs. 
) 
+0

Dies verwendet nicht das Formular Builder-Objekt, das bedeutet, alle vorhandenen Werte werden nicht Wird beim Rendern der Ansicht automatisch von den Schienen vorgewählt. – hypern

0

versuchen, diese

<%= f.collection_select(:channel_id, :id, prompt: true) %> 
+0

Dort habe ich diesen Fehler: falsche Anzahl von Argumenten (3 für 4..6) – Felix

+0

Wie wäre es damit? <% = f.collection_select (: channel_id,: id, @channels, prompt: true)%> –

+0

Keine davon liefert die richtigen Parameter für die Methode collection_select – hypern