Я пытаюсь создать форму для «Инцидента», которая позволяет пользователям динамически добавлять к ней заметки (текстовые поля) с помощью некоторого JavaScript.Поэтому, когда они нажимают кнопку «Добавить заметку» в форме, появляется текстовое поле, и они могут добавить заметку.Если они нажмут на нее еще раз, появится другое поле.Пока это работает нормально при создании нового инцидента, но когда я редактирую инцидент и добавляю новое поле, он не улавливает отношения между инцидентным примечанием и пользователем.
Например, вот что я вижу, когда создаю новый инцидент.
INSERT INTO "incident_notes" ("created_at", "updated_at", "user_id", "note", "incident_id") VALUES('2010-07-02 14:07:42', '2010-07-02 14:07:42', 2, 'A Note', 8)
Как видите, поле user_id имеет присвоенный ему номер.Но вот что происходит во время редактирования, когда я добавляю еще одну заметку:
INSERT INTO "incident_notes" ("created_at", "updated_at", "user_id", "note", "incident_id") VALUES('2010-07-02 14:09:11', '2010-07-02 14:09:11', NULL, 'Another note', 8)
user_id равен NULL.Я не уверен, что я сделал.Код очень похож и для «редактирования», и для «нового» в контроллере.
У меня есть следующие модели и связи (показаны только соответствующие разделы):
class Incident < ActiveRecord::Base
has_many :incident_notes
belongs_to :user
end
class IncidentNote < ActiveRecord::Base
belongs_to :incident
belongs_to :user
end
class User < ActiveRecord::Base
has_many :incidents
has_many :incident_notes
end
Здесьсоответствующая часть новой формы (редактирование по сути то же самое):
<% form_for([@customer,@incident]) do |f| %>
<p>
<% f.fields_for :incident_notes do |inf| %>
<%= render "incident_note_fields", :f => inf %>
<% end %>
<p><%= link_to_add_fields "Add Note", f, :incident_notes %></p>
</p>
<p>
<%= f.submit "Create" %>
</p>
<% end %>
А вот методы создания и обновления в контроллере инцидентов.
def create
@incident = @customer.incidents.build(params[:incident])
@incident.capc_id = generate_capc_id
for inote in @incident.incident_notes
(inote.user = current_user) if (inote.user == nil)
end
respond_to do |format|
if @incident.save #etc
end
def update
@incident = @customer.incidents.find(params[:id])
for inote in @incident.incident_notes
(inote.user = current_user) if (inote.user == nil)
end
respond_to do |format|
if @incident.update_attributes(params[:incident])
#etc
end
Может бытьлучший способ сделать это, но, как вы можете видеть в методе «создать», мне пришлось вручную установить поле пользователяident_note для текущего пользователя.Это прекрасно работает, но, похоже, то же самое не работает в методе обновления.
Любые идеи, предложения и помощь будут весьма уместны!Я очень застрял на данный момент.:)