在编辑中添加关系的问题,而不是新的

时间:2010-07-02 15:03:59

标签: ruby-on-rails

我正在尝试为“事件”构建一个表单,允许用户使用一些javascript动态添加注释(文本字段)。因此,当他们单击表单中的“添加注释”按钮时,会弹出一个文本字段,他们可以添加注释。如果他们再次点击它,将显示另一个字段。到目前为止,这在创建新事件时工作正常,但是当我编辑事件并添加新字段时,它不会获取incident_note和user之间的关系。

例如,这是我在创建新事件时看到的内容。

 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

可能有更好的方法来执行此操作,但正如您在“创建”方法中所看到的,我必须手动将incident_note用户字段设置为当前用户。这工作正常,但在更新方法中似乎不起作用。

任何想法,建议和帮助都会受到很多关注!我现在非常困难。 :)

1 个答案:

答案 0 :(得分:0)

我建议您没有直接属于用户的incident_notes。换句话说,用户有很多事件,事件中有很多事件记录。

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

然后通过她的事故模型

获取用户的事件说明