2010-07-02 51 views
0

我試圖建立一個「事件」,允許用戶動態地添加筆記(文本字段)與一些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用戶字段手動設置爲當前用戶看到。這工作正常,但似乎沒有在更新方法中工作。

任何想法,建議和幫助將被大大支持!我現在很困難。 :)

回答

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 

用戶的事件筆記,然後通過她的事件模型

+0

的問題,這是我希望用戶能夠爲其他用戶所擁有的事件創建註釋獲得。如果我理解正確,這不會允許,對吧? – Magicked 2010-07-02 17:06:46

+0

不,我相信只要事件的所有權保留在原始用戶身上,仍然可以工作。用戶B「有權限」更新或爲用戶A創建備註的問題是特定於應用程序的概念,並且應用程序不會通過數據庫架構強制實施。只要允許控制器操作允許「current_user」查找屬於另一個用戶的事件,您應該沒問題 – bjg 2010-07-02 20:43:06