NestedAttributes无法运行

时间:2016-12-31 04:05:40

标签: javascript ruby-on-rails coffeescript nested-attributes

我有活动和歌曲。当用户登录时,他们可以查看他们的所有事件以及创建的某个事件的聚会代码,单击一个并查看该事件的所有歌曲。现在,当用户未登录时,他们可以基于特定的聚会代码将歌曲添加到特定事件。我无法添加字段并将这些添加的字段提交到提交按钮,但我可以提交第一组字段。

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()

我想要做的就是将这些额外的字段提交到我的事件数据库中,该数据库包含歌曲。我已就这个问题发布了很多问题,但我还没有得到一个能够解决我一直在寻找的问题的答案,并且花了几个小时在这段代码后我真的想找到一个解决方案。 enter image description here

0 个答案:

没有答案