Rails 5.2 - как связать модель отчета с двумя пользователями - PullRequest
0 голосов
/ 08 декабря 2018

В многопоточном контексте обсуждения я хочу разрешить пользователям публиковать оскорбительные комментарии.У меня есть таблица отчетов, в которую я хочу записать как пользователя, который написал комментарий, так и пользователя, который подал жалобу.

Таблица моих отчетов в настоящее время выглядит следующим образом:

create_table "reports", force: :cascade do |t|
  t.bigint "comment_id"
  t.bigint "user_id"
  t.integer "author_id"
  t.text "body"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.index ["comment_id"], name: "index_reports_on_comment_id"
  t.index ["user_id"], name: "index_reports_on_user_id"
end

user_id записывает идентификатор пользователя, подающего жалобу.author_id записывает идентификатор автора комментария.

Ассоциации устанавливаются следующим образом:

report.rb

class Report < ApplicationRecord
  belongs_to :comment
  belongs_to :user
  belongs_to :author, class_name: 'User', foreign_key: 'author_id'
end

user.rb

class User < ApplicationRecord
  # Nothing yet, but presumably need something
end

В консоли я могу сделать запрос следующим образом:

r = Report.last
=> #<Report id: ...
r.user
=> #<User id: ...

, но не могу запросить

r.author
=> NoMethodError: undefined method `author' for #<Report:0x000000082ef588>

Итак, первый вопрос: как мне разрешить этот тип запроса?

Во-вторых, я хотел бы иметь возможность запрашивать жалобы (отчеты), направленные против определенных пользователей, поэтому:

u = User.last
=> #<User id: ...
u.complaints
=> #<ActiveRecord::AssociationRelation [...

Что мне нужно добавить, чтобы включить эти запросы тоже?

1 Ответ

0 голосов
/ 08 декабря 2018
class Report < ApplicationRecord
  belongs_to :comment
  belongs_to :user
  belongs_to :author, class_name: 'User', foreign_key: 'author_id'
end

class User < ApplicationRecord
  # Nothing yet, but presumably need something
  has_many :reports #user reports
  #Query the complaints (Reports) made against particular Users
  has_many :complaints, class_name: 'Report', foreign_key: 'author_id'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...