【发布时间】:2017-05-06 06:54:09
【问题描述】:
我有 3 个模型,分别名为 User、Photo 和 Report
模型Report 是一个多态类,用于报告用户和照片,模型User 与模态Photo 具有多态关联。
所以功能是用户可以报告照片或任何其他用户。
下面是Report的迁移文件。
class CreateReports < ActiveRecord::Migration
def change
create_table :reports do |t|
t.integer :user_id
t.integer :reported_id
t.string :reported_type, default: "User"
t.string :note, default: ""
end
end
end
以下是关联
class User < ActiveRecord::Base
...
has_many :photos, as: :attachment
has_many :reports, dependent: :destroy
...
end
class Photo < ActiveRecord::Base
...
belongs_to :attachment, :polymorphic: true
end
class Report < ActiveRecord::Base
belongs_to :user
belongs_to :reported, polymorphic: true
end
目前我使用如下查询来获取用户自己或他们的照片报告的用户列表。
Report.where("(reported_id=? AND reported_type=?) OR (reported_id in (?) AND reported_type=?)",
self.id, "User", self.photos.pluck(:id), "Photo")
所以,我想知道如何通过 has_many 关联实现相同的目标?
如果我有任何更好的方法可以达到同样的效果,请帮助我,如果我错了,请纠正我。
【问题讨论】:
标签: ruby-on-rails activerecord has-many polymorphic-associations