1

是否可以簡單地添加新的關聯?Rails:添加新的has_and_belongs_to_many關聯而不創建對象?

我有兩個通過has_and_belongs_to_many綁在一起的對象。 模型A將始終是唯一的,但對應的模型B對象可能已經在數據庫中。

A型創建我怎麼告訴Rails找到相應B型對象和兩個模型聯繫在一起 - 或 - 如果沒有合適的B型對象不存在,則繼續創建它? 我應該做一個.where查找然後一個SQL查詢將兩個ID添加到連接表,或者是否有一個本機ActiveRecord方法來做到這一點?

+0

這聽起來不像許多關係,如果是這樣,您需要創建一個包含model_a_id和model_b_id的連接表,而不僅僅是model_b中的外鍵。 – Gazler 2011-04-10 22:30:35

+0

@Gazier謝謝你指出,我重寫了這個問題。 – Marco 2011-04-10 23:41:50

回答

1

Rails關聯不會以受限制的方式綁定模型。假設你有一個User和Post模型。關聯用戶has_many帖子只是創建一個界面。使用界面,你現在可以做的:

user.posts 

,這將返回用戶的所有職位。如果你想添加或找到一篇文章,你可以執行:

Post.find_or_create_by_user_id(...) 

這將找到帖子或創建它。

另外,在您的示例中,您提到了一對多關聯。因此,你不需要一個擁有並且屬於多個關聯,而是一個has_many/belongs_to。

2
# the piece from create action of ProductsController 
categories = Array.new(@product.categories) 
@product.categories.clear 
categories.each do |c| 
    @product.categories << Category.find_or_create_by_name(c.name) 
end 
# ready to @product.save 
相關問題