我需要额外的关联吗?

时间:2013-09-27 21:25:28

标签: ruby-on-rails associations nested-attributes

我正在构建一个Rails应用程序,允许一个用户请求群组提供支持。

Class User
  has_many :requests

Class Request
  belongs_to :users

目前,用户点击不同的链接将请求发送到其他子组。 我想通过让用户选择/取消选择人来允许进一步的自定义。

我需要一个协会来实现这一目标吗?有点像...

Class User
  has_many :sent_requests, class_name 'Request'
  has_many :received_requests
  has_many :requests, :through received_requests

Class Request
  belongs_to :client, class_name 'User'
  has_many :received_requests

Class ReceivedRequest
  belongs_to :user
  belongs_to :client

这似乎是屁股的痛苦。我可以吗?   - 在请求#new控制器操作中创建一个@users实例变量,没有任何关联   - 将其传递给视图,使表单显示复选框   - 让用户取消选中人员   - 以某种方式将该变量传递回创建动作

我想更普遍的问题是,我如何决定是否需要添加关联?

最后,这可能是我需要使用嵌套资源的情况吗?

感谢您的帮助。我是新来的......

1 个答案:

答案 0 :(得分:0)

您应该在此处使用关联,因为您要存储哪些用户与数据库中的特定请求相关联。关联是用rails存储这些关系的正确方法。

如果设置正确,关联实际上非常容易管理。在这种情况下,我认为使用嵌套资源没有任何优势。

另一种方法是仅使用修改后的HABTM关联,但在连接模型中包含一个属性,以指示哪个用户拥有该请求以及哪个用户正在接收该请求。

Class User
  has_many :requests, through: :user_requests
  has_many :user_requests

Class Request
  has_many :users, through: :user_requests
  has_many :user_requests

Class UserRequest
  belongs_to :user
  belongs_to :request

在UserRequest中有一个名为:owner的属性。对于发出请求的用户和Request对象之间的Join,将其设置为true。与该请求关联的其余用户将接收该用户。