2016-12-28 20 views
0

私の曲のモデル内に「複数のフィールドを追加する」というようなリンクを作成するにはどうすればよいですか?私はイベントhas_manyの曲の関係のネストされた属性でそれを行うことができました。私は歌のためだけに同じことをする必要がありますか?ネストされた属性の列

<br> 
<br> 
<div class ="container"> 
    <div class="jumbotron"> 
    <h2> Select an event to add songs to: </h2> 
    <%= form_for @song do |f| %> 


     <%= f.collection_select(:event_id, Event.all, :id, :name) %> 

     <h3> Enter your song </h3> 
     <%= f.text_field :artist, placeholder: "Artist" %> 
     <%= f.text_field :title, placeholder: "Title" %> 
     <%= f.text_field :genre, placeholder: "Genre" %> 
     <h2> Enter the partycode for that event: </h2> 

     <%= form_for Event.new do |f| %> 

     <%= f.text_field :partycode, :required => 'required'%> 

     <%= f.submit "Submit", class: "btn btn-primary", :onclick => "window.alert('Aye');" %> 
     <% end %> 

     <h2><%= link_to_add_fields "Want to add more songs?", f, :songs %> </h2> 
    <% end %> 
    </div> 
</div> 

link_to_add_fieldsをApplicationHelperファイルにここで定義されています:

module ApplicationHelper 
    def link_to_add_fields(name, f, association) 
    new_object = f.object.send(association).klass.new 
    id = new_object.object_id 
    fields = f.fields_for(association, new_object, child_index: id) do |builder| 
     render("songs_fields", f: builder) 
    end 
    link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")}) 
    end 
end 

ここ

はに曲を追加するイベントを選択しながら、新しい曲の作成を扱う曲のページがあります私はこのApplicationHelperファイルに以下のようなエラーが表示されています: enter image description here

+0

あなたは別の 'form_for'内1' form_for'を使用することはできません。 –

答えて

1

あなたはイベントと曲の関係に巻き込まれたようです。ソングを作成/編集するためのフォームの定義を開始し、イベントを選択するためのインターフェイスを提供し、同じフォーム内で「ソングを追加」(曲に)を提供します。

これは、このページのあなたの記述に反映されることに注意してください:「に曲を追加するイベントを選択しながら、新しい曲の作成を扱う曲のページ」。あなたはそれを大声で読んで、次にあなたがこのページにしたいものを見つけ出すことをうまくするでしょう。

エラーが発生しました。エラーの結果、Songにはsongsメソッドがありません。 link_to_add_fieldsメソッドの範囲では、fがフォームヘルパーです。 f.objectを呼び出すと、form_forメソッドに渡されたオブジェクト(この場合は@song)が返されます。 link_to_add_fields:songsに渡された関連付けは、Songの関連付けとして存在しません。つまり、@song.songsに電話することはできません。

0

cocoon gemを試すことができます。

繭は、ネストされたフォームを扱いやすくします。

関連する問題