【问题标题】:Complex Rails Association复杂铁路协会
【发布时间】:2016-12-03 09:33:14
【问题描述】:

不确定which association 最适合我想要的。基本上它是一个待办事项列表。该列表是一个任务,该任务有很多用户。

ie:挖一个洞,种一些种子。挖一个洞需要两个或更多的人。吉姆和乔正在挖坑,之后乔会播种。所以要完成两个列表,第一个由两个用户完成,另一个由一个用户完成。如果需要,两个用户都可以完成这两个列表。

  • 待办事项:有很多列表
  • 列表:属于待办事项
  • 列表:有很多用户
  • 用户:有很多列表

如果我不清楚,todo 上的每个任务(列表)都可以由任何用户完成。我很难看到在用户表上放置list_id 的位置。这是不可能的,因为该用户可以同时做另一个(列表)。我不确定through: :association 是如何在这里发挥作用的。

User.first.lists #= []
Todo.first.lists.first.users #= []

我什么也没得到,因为user_id 需要去某个地方。

【问题讨论】:

  • 你有一个多对多的关系......你不能通过将 list_id 放在用户表中来解决这个问题,你需要创建一个关联(联结)表来解决这个问题。有关示例,请参阅stackoverflow.com/questions/497395/…
  • 嗨,大卫。我也去那里看看。谢谢

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

如果我没记错的话,听起来您需要一个连接表。然后你声明你的记录有一个关系:通过连接表。

例子

您有一个名为:user_lists 的连接表,其中包含 3 条数据(id、user_id、list_id)

所以每次用户有一个列表时,您都会在此表上创建一条记录。

然后在你的用户模型中

class User < ActiveRecord::Base
    has_many :lists, :through => :user_lists
end

如果我正确理解了您的设置,那么我希望这会有所帮助,如果没有,请告诉我。

您可以在此处阅读有关关联的更多信息http://guides.rubyonrails.org/association_basics.html

【讨论】:

  • 这敲响了警钟。我稍后会确认你的回答。谢谢。
  • 那么list.rb 中的内容是什么?有has_many吗?你还说“在你的用户模型中”你有class Course...你的意思是class User...
  • 没问题。我已经想通了。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多