簡體   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