【问题标题】:Do I need an extra association?我需要额外的关联吗?
【发布时间】:2013-09-27 21:25:28
【问题描述】:

我正在构建一个 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 实例变量,没有任何关联 - 将其传递给视图,让表单显示复选框 - 让用户取消选中人员 - 以某种方式将该变量传递回创建操作

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

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

感谢您的帮助。我是新手……

【问题讨论】:

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


    【解决方案1】:

    您应该在此处使用关联,因为您需要在数据库中存储哪些用户与特定请求相关联。关联是存储这些与 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。与该请求关联的其余用户将收到它。

    【讨论】:

    • 谢谢,这很有意义。
    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2021-04-15
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多