我对rails相当陌生,并且正在开发一个应用程序,它基本上允许用户报告对其他用户的不满(只是一个我想和朋友一起使用的有趣的应用程序)。基本上只有两个模型,用户和报告。用户有许多报表,报表属于用户(即。用户与提交的报告相关联)
基本模型结构:
class User<ApplicationRecord
has_many :reports
end
class Report<ApplicationRecord
belongs_to :user
end现在,用户可以提交新的报告,并从下拉列表中选择与其关联的用户,但我也希望在报表和提交报告的用户之间添加一个关联,这样我就可以查看用户所做的报告,并找到他们报告最多的用户。(即)我希望用户有很多关于他们的报告,有很多他们写的关于别人的报告)
我不知道如何做到这一点,因为我需要区分这有很多/属于关系与我上面的关系。有什么想法吗?
发布于 2020-12-25 16:30:03
我认为您需要类似于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所做的user:
Report.where(reported_by_id: user.id)这可能有助于迁移。,您可以简单地运行rails g migration <name_of_your_migration>,这将生成一个具有该名称的文件,并在change function中添加上面的代码。
上面的例子是在rails 5.2上,您使用上面的修复方法说的是:除了这个关系之外,我和report一样与表users也有一个特殊的关系(如果数据库中已经有数据,那么您可以使这种关系成为可选的或者不是可选的,我认为您应该这样做-- optional)。我希望这能帮到你!
https://stackoverflow.com/questions/65449164
复制相似问题