2014-07-17 163 views
1

我有以下型號關聯結構在我的Rails應用程序ActiveRecord的實例分配給兩位業主:尋找優雅的方式來一次

class User < ActiveRecord::Base 
    has_many :folders 
    has_many :notes 
end 

class Folder < ActiveRecord::Base 
belongs_to :user 
has_many :notes 
end 

class Note < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :folder 
end 

我要的是使呼叫

@folder.notes.create() 

分配一次註釋文件夾和文件夾所有者。

換句話說,而不是

@folder = current_user.folders.first 
... 
@note = Note.new  
@folder.notes << @note 
current_user.notes << @note 

我只想

@folder.notes.create() 

什麼是實現這一目標的最佳途徑?


更新

或者我如何可以覆蓋在每個文件夾例如筆記創建< <功能。

+0

'@ folder.notes.create(用戶:CURRENT_USER)'是單向的 – Sharagoz

+0

感謝名單@Sharagoz,但我想避免這種明確的參數作爲文件夾已知道它的用戶。對不起,如此超臨界 – nsave

+0

如果音符和它的文件夾總是屬於同一個用戶,那麼'Note'上的'belongs_to:user'關聯就完全是多餘的,可以被刪除? – Sharagoz

回答

0

我找到了一個解決方案,這要歸功於@Sharagoz指向我的回調方向!

after_add回調有訣竅。

以下是我已經改變了:

class Folder < ActiveRecord::Base 
    belongs_to :user 
    has_many :notes, after_add: :add_to_user 

    def add_to_user(note) 
    if(self.user) 
     self.user.notes << note 
    end 
    end 
end 
相關問題