【问题标题】:Rails user has many users through usersRails 用户通过 users 有很多用户
【发布时间】:2021-04-03 13:05:44
【问题描述】:

我对 Rails 还很陌生,并且正在开发一个基本上允许用户报告对其他用户的不满的应用程序(只是一个我想与朋友一起使用的有趣应用程序)。基本上只有两个模型,用户和报告。一个用户有许多报告并且报告属于一个用户(即一个用户与提交的关于他们的报告相关联)

基本模型结构:

class User<ApplicationRecord
    has_many :reports  
end

class Report<ApplicationRecord
    belongs_to :user
end

现在,用户可以提交新报告并从下拉列表中选择与哪个用户关联,但我还想在报告和提交报告的用户之间添加关联,以便我可以浏览报告用户创建并找到他们报告最多的用户。 (即,我希望用户有很多关于他们的报告,也有很多他们针对其他人的报告)

我不知道如何做到这一点,因为我需要将这个 has_many/belongs to 关系与我上面的关系区分开来。有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails rails-activerecord model-associations


    【解决方案1】:

    我认为您想要reporter association 之类的东西,这可以通过从report 表到user 表的可选引用来实现:

    所以在您的report model 上添加以下行:

    belongs_to :reporter, class_name: :User, foreign_key: 'reported_by_id', optional: true
    

    然后生成migration并添加以下代码:

    add_reference :reports, :reported_by, index: true
    

    然后你可以这样做:

    report.reporter = user1
    report.save
    or
    user2 = report.reporter
    

    然后获取特定user 制作的reports

    Report.where(reported_by_id: user.id)
    

    This may help with the migration,你可以简单地运行rails g migration &lt;name_of_your_migration&gt;,这将生成一个具有该名称的文件并将上面的代码添加到change function中。

    上面的例子是在rails 5.2上,你所说的上面的修复就是:除了关系之外,我作为report与表users有一个特殊的关系,我也和一个特定的用户有一个特殊的关系(如果您的数据库中已有数据,您可以将该关系设为可选或不设为可选,我认为您应该这样做optional)。我希望这有帮助! ?

    【讨论】:

    • 嘿,谢谢。我认为这看起来正是我想要的。当你说“生成迁移”时,你能澄清一下我应该做什么吗?我对使用生成器的语法有点困惑
    • 很高兴为您提供帮助!如果您认为答案正确,请将其标记为已接受 ?@Will Worrell
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2021-11-16
    • 2017-04-25
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多