我有活动和歌曲。当用户登录时,他们可以查看他们的所有事件以及创建的某个事件的聚会代码,单击一个并查看该事件的所有歌曲。现在,当用户未登录时,他们可以基于特定的聚会代码将歌曲添加到特定事件。我无法添加字段并将这些添加的字段提交到提交按钮,但我可以提交第一组字段。
new.html.erb(处理选择事件和添加歌曲的页面)
<br>
<br>
<div class ="container">
<div class="jumbotron">
<h2> Select an event to add songs to: </h2>
<%= form_for Song.new 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| %>
<h4><%= link_to_add_fields "Want to add more songs click here", f, :songs %></h4>
<%= f.text_field :partycode %>
<%= f.submit "Submit", class: "btn btn-primary" %>
<% end %>
<% end %>
</div>
</div>
link_to_add_fields方法位于application_helper.rb
中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
songs_fields partial定义如下:
<fieldset>
<%= text_field_tag "songs[][artist]" %>
<%= text_field_tag "songs[][title]" %>
<%= text_field_tag "songs[][genre]" %>
</fieldset>
这是我的活动模型:
class Event < ApplicationRecord
belongs_to :user
has_many :songs, dependent: :destroy
accepts_nested_attributes_for :songs, allow_destroy: true
validates :name, presence: true
validates :partycode, presence: true, length: {minimum: 5}
end
最后,我已经定义了一个coffeescript文件来添加额外的字段:
$(document).on 'click', 'form .add_songs', (event) ->
time = new Date().getTime()
regexp = new RegExp($(this).data('event_id'), 'g')
$(this).before($(this).data('songs').replace(regexp, time))
event.preventDefault()
我想要做的就是将这些额外的字段提交到我的事件数据库中,该数据库包含歌曲。我已就这个问题发布了很多问题,但我还没有得到一个能够解决我一直在寻找的问题的答案,并且花了几个小时在这段代码后我真的想找到一个解决方案。