我正在构建一个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实例变量,没有任何关联 - 将其传递给视图,使表单显示复选框 - 让用户取消选中人员 - 以某种方式将该变量传递回创建动作
我想更普遍的问题是,我如何决定是否需要添加关联?
最后,这可能是我需要使用嵌套资源的情况吗?
感谢您的帮助。我是新来的......
答案 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。与该请求关联的其余用户将接收该用户。