2016-12-28 311 views
0

我如何創建一個鏈接,在我的歌曲模型中添加「添加更多字段」?我能夠爲我的事件has_many歌曲關係嵌套屬性。我是否需要爲歌曲做同樣的事情?嵌套屬性Rails

這裏是歌頁,與新的歌曲創作處理,同時選擇哪個事件將歌曲添加到:

<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中使用一個'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

Cocoon使處理嵌套窗體更容易。