我已經研究如何做到這一點,我已經找到了最好的資源是http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.htmlRails的:我如何通過在模型嵌套屬性重複創建新條目時
具體該網頁上,它說:
member = Member.create(params[:member])
member.posts.length # => 2
member.posts.first.title # => 'Kari, the awesome Ruby documentation browser!'
member.posts.second.title # => 'The egalitarian assumption of the modern citizen'
我試圖迭代我的嵌套屬性,併爲嵌套在事件模型中的每個場景創建一個新的Entry對象,但是如何遍歷使用.first和.second等等。
因此,這裏的總體目標是創建一個複雜的表單,當您創建事件時,可以使用嵌套屬性在該事件中創建許多場景。當您創建或更新場景或事件時,它需要啓動並創建一個與事件ID相關聯的新日誌條目。除此之外,我還需要在將資產分配給場景並將資源分配scene_role時啓動回調。
我經過幾個小時的研究,未能弄清楚如何使用.first和.second之外的嵌套屬性進行迭代。
這裏是我的事件模型:
class Incident < ActiveRecord::Base
has_many :scenes
has_many :scene_assignments
has_many :entries
after_create :create_action
after_update :update_action
accepts_nested_attributes_for :scenes
accepts_nested_attributes_for :scene_assignments
def create_action
@entry = Entry.new(incident_id: self.id, name: "Created Incident - #{self.name}")
@entry.save
self.scenes.each do
@scene_entry = Entry.new(incident_id: self.id, name: "#{self.scenes.first.name} was created")
@scene_entry.save
end
end
def update_action
@entry = Entry.new(incident_id: self.id, name: "Updated Incident - #{self.name}")
@entry.save
end
end
它是如何工作目前是:這將創建事件與事件名稱的日誌條目。我還填寫了2個場景。因此,它將爲條目表中的這些場景創建2個條目,其中事件ID將條目正確綁定到事件。但是,它只會打印日誌條目中第一個場景的名稱。
此外,我知道,在日誌條目中調用列名稱是非常直觀的:對於日誌條目,但它是存儲條目的位置。
因此數據庫表看起來像
ID | NAME | INCIDENT_ID and the records look like:
1 | Incident Name | 50
2 | Scene 1 Name | 50
3 | Scene 1 Name | 50
哦,我的上帝,我覺得自己像個白癡。是的,工作。謝謝。 – Eric 2014-10-03 00:09:34
不用擔心,樂於幫忙。 – Arvoreniad 2014-10-03 07:24:08