繁体   English   中英

如何以Rails方式创建具有其他关联的关联?

[英]How do I create an association that has other associations in a Rails way?

所以我有一个NodeVideoFamilyTreeUser

当您以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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM