![](/img/trans.png)
[英]How to create has_many associations in the intermediate model of has_many :through association in an optimal way Rails
[英]How do I create an association that has other associations in a Rails way?
所以我有一個Node
, Video
, FamilyTree
和User
。
當您以current_user
身份登錄時,他們可以上傳視頻。 無論何時上傳video
,它都會成為current_user的family_tree
上的一個node
。
主要關聯是: Video has_one Node
。
這有效:
@video.create_node(name: @video.title, family_tree_id: @family_tree.id, user_id: current_user.id)
但是,根據Rails指南,我應該能夠執行以下操作:
@video.create_node(@family_tree.attributes)
這並不完全有效,因為它將不正確的family_tree.name
分配給node.name
(從上面我的正確示例中可以看到)。
我嘗試過這樣的事情:
@video.create_node(@video.attributes, @family_tree.attributes, current_user.attributes)
但這沒有用。
如何以更優雅的Rails方式做到這一點?
除了通過名稱而不是密鑰( user
vs user_id
,等等)傳遞關聯之外,這已經和您所獲得的一樣混亂。
Rails有其神奇之處,但我不認為像您的示例一樣,可以根據另一個屬性創建一個記錄。
最終結果如下所示:
@video.create_node(
name: @video.title,
family_tree: @family_tree,
user: current_user
)
@numbers ...是正確的,您必須命名特定的屬性,以便Rails知道您指的是哪些屬性。 所以您的第一個例子是正確的,第二個例子是有缺陷的。
但是,還有另一個選擇,您可以創建另一個名為(例如)create_node_on_video的方法,接受模型video和family-tree,並在此輔助方法中選擇使用create_node並保存所需的元素。
def create_node_on_video
return if @video.nil? or @family-tree.nil?
@video.create_node(name: @video.title, family_tree_id: @family_tree.id, user_id: current_user.id)
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.