Проблемы с добавлением отношений в редактировании, а не новые - PullRequest
0 голосов
/ 02 июля 2010

Я пытаюсь создать форму для «Инцидента», которая позволяет пользователям динамически добавлять к ней заметки (текстовые поля) с помощью некоторого 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 для текущего пользователя.Это прекрасно работает, но, похоже, то же самое не работает в методе обновления.

Любые идеи, предложения и помощь будут весьма уместны!Я очень застрял на данный момент.:)

1 Ответ

0 голосов
/ 02 июля 2010

Я полагаю, что у вас нет инцидентных примечаний, непосредственно принадлежащих пользователю.Другими словами, у пользователя много инцидентов, и у инцидента есть много заметок об инциденте.

class Incident < ActiveRecord::Base
  has_many                :incident_notes
  belongs_to              :user
end

class IncidentNote < ActiveRecord::Base
  belongs_to :incident
end

class User < ActiveRecord::Base
  has_many :incidents
  has_many :incident_notes, :through => :incident
end

Примечания об инциденте пользователя затем получаются через его модель инцидентов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...