0

我正在构建一个 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

这似乎是一件让人头疼的事情。我可以 - 在 request#new 控制器操作中创建一个 @users 实例变量,没有任何关联 - 将其传递给视图,让表单显示复选框 - 让用户取消选中人员 - 以某种方式将该变量传递回创建操作

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

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

谢谢你的帮助。我是新来的...

4

1 回答 1

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 的属性。对于发出请求的用户和请求对象之间的联接,将此设置为 true。与该请求关联的其余用户将收到它。

于 2013-09-27T23:51:21.513 回答