![](/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.