2014-10-02 24 views
1

我已經研究如何做到這一點,我已經找到了最好的資源是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 

回答

1

如果你想迭代模型的嵌套屬性只是用一般的Ruby循環:

member.posts.each do |post| 
... 
end 

你可以做任何你喜歡循環內的post變量 - 更新,保存,銷燬等。

+0

哦,我的上帝,我覺得自己像個白癡。是的,工作。謝謝。 – Eric 2014-10-03 00:09:34

+0

不用擔心,樂於幫忙。 – Arvoreniad 2014-10-03 07:24:08

相關問題