首先,我覺得我正在接近這個錯誤的方式,但我不知道如何去做。這也有點難以解釋,所以請耐心等待。Rails:在保存更新之前操作參數 - 錯誤的方法?
我使用Javascript來允許用戶在編輯表單中添加多個文本區域,但這些文本區域是針對單獨模型的。它基本上允許用戶以兩種模式而不是一種模式編輯信息。這裏是關係:
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
當用戶添加一個「事件註釋」,它應該自動識別該特定用戶的筆記。我還希望多個用戶能夠爲同一事件添加備註。
我遇到的問題是,當用戶添加新的文本區域時,rails無法知道新的incident_note屬於用戶。所以它最終創建了incident_note,但user_id是零。例如,在日誌中我看到了下面的INSERT語句,當我編輯的形式,並添加新的註釋:
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)
所以我已經決定嘗試做的是操縱PARAMS爲:事件更新方法。這樣我就可以自己添加user_id,但是這看起來不像滑軌,但我不確定它是如何的。
當提交表單時,這些參數是這樣的:
Parameters: {"commit"=>"Update", "action"=>"update", "_method"=>"put", "authenticity_token"=>"at/FBNxjq16Vrk8/iIscWn2IIdY1jtivzEQzSOn0I4k=", "id"=>"18", "customer_id"=>"4", "controller"=>"incidents", "incident"=>{"title"=>"agggh", "incident_status_id"=>"1", "incident_notes_attributes"=>{"1279033253229"=>{"_destroy"=>"", "note"=>"test"}, "0"=>{"id"=>"31", "_destroy"=>"", "note"=>"asdf"}}, "user_id"=>"2", "capc_id"=>"SDF01-071310-004"}}
所以我想我可以編輯本節:
"incident_notes_attributes"=>{"1279033253229"=>{"_destroy"=>"", "note"=>"test"}, "0"=>{"id"=>"31", "_destroy"=>"", "note"=>"another test"}}
正如你所看到的,一個他們還沒有一個id,這意味着它將被新插入表中。
我想另一個屬性添加到新的項目,所以它看起來是這樣的:
"incident_notes_attributes"=>{"1279033253229"=>{"_destroy"=>"", "note"=>"test", "user_id" => "2"}, "0"=>{"id"=>"31", "_destroy"=>"", "note"=>"another test"}}
,但這又似乎未鐵軌樣,我不知道怎麼去解決它。以下是事件控制器的更新方法。
# PUT /incidents/1
# PUT /incidents/1.xml
def update
@incident = @customer.incidents.find(params[:id])
respond_to do |format|
if @incident.update_attributes(params[:incident])
# etc, etc
end
我想我也許可以添加類似以下內容:
params[:incident].incident_note_attributes.each do |inote_atts|
for att in inote_atts
if att.id == nil
att.user_id = current_user.id
end
end
end
但顯然incident_note_attributes
不是方法。所以我不知道該怎麼做。我怎麼解決這個問題?
對不起,對文本的牆。任何幫助深表感謝!