2016-02-26 168 views
1

我有兩個類:自定義保存在嵌套屬性

class Post 
    has_and_belongs_to_many :receivers 
    accepts_nested_attributes_for :receivers 
end 

class Receiver 
    has_and_belongs_to_many :posts 

表架構是這樣的:

posts: id, xxx 

receivers: id, email, name, xxxx 

posts_receivers: post_id, receiver_id 

我幾乎如下蒞臨指導:http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association

所以在我的post形式,每個人可以包含幾個接收者,這只是幾個電子郵件文本字段。新的收件人記錄會根據這些電子郵件自動創建。它會發生不同的post表格有一些現有的電子郵件,那麼我不想在現有的電子郵件receivers表中創建新的記錄。相反,我想找到與現有電子郵件的接收者ID並將ID保存到posts_receivers表中。

現在它只是爲新帖子創建新的收件人記錄,無論該郵件是現有郵件還是新郵件。

有關如何實現這一點的任何建議?非常感謝!

回答

1

嵌套屬性不會爲您處理這種情況 - 它們更適用於嵌套對象屬於父對象時。

您可以通過加載了每個現有的接收器在你的控制器,創造了休息,然後將其分配到後手動執行此操作:

def create 
    post = Post.new(params[:post]) 
    post.receivers = params[:receivers].map do |receiver_params| 
    Receiver.first_or_create(receiver_params) 
    end 
    post.save! 
end