Рассматривали ли вы nested_attributes для моделей рельсов? Вместо нескольких new
форм обратной связи, каждая из которых связана с аннотацией, вы можете иметь несколько edit
форм аннотации, где каждая аннотация содержит поля для новой обратной связи. Идентификаторы сгенерированных форм будут включать идентификатор аннотации, такой как edit_annotation_16
.
Модель аннотации будет иметь отношение к своим обратным связям, а также будет принимать для них вложенные атрибуты.
class Annotation < ActiveRecord::Base
has_many :feedbacks
accepts_nested_attributes_for :feedbacks
end
class Feedback < ActiveRecord::Base
belongs_to :annotation
end
Вы можете добавить столько форм, сколько хотите, по одной для каждой аннотации. Например, вот что я попробовал:
<% form_for @a do |form| %>
Lyrics: <br />
<%= form.text_field :lyrics %><br />
<% form.fields_for :feedbacks do |feedback| %>
Feedback: <br/>
<%= feedback.text_field :response %><br />
<% end %>
<%= form.submit "Submit" %>
<% end %>
<% form_for @b do |form| %>
Lyrics: <br />
<%= form.text_field :lyrics %><br />
<% form.fields_for :feedbacks do |feedback| %>
Feedback: <br/>
<%= feedback.text_field :response %><br />
<% end %>
<%= form.submit "Submit" %>
<% end %>
И быстрый и грязный контроллер для вышеупомянутого вида редактирования:
class AnnotationsController < ApplicationController
def edit
@a = Annotation.find(1)
@a.feedbacks.build
@b = Annotation.find(2)
@b.feedbacks.build
end
def update
@annotation = Annotation.find(params[:id])
@annotation.update_attributes(params[:annotation])
@annotation.save!
render :index
end
end