Я хочу создать функцию, в которой пользователь сможет сообщать о публикации, если содержание публикации содержит что-то, что не соответствует рекомендациям.
Что у меня есть:
модель/post.rb
class Post < ApplicationRecord
belongs_to :author, class_name: 'User', foreign_key: 'author_id'
has_many :reports, dependent: :destroy
scope :reported, -> { distinct.joins(:reports) }
validates :title, :content, :author_id, presence: true
end
model / user.rb
class User < ApplicationRecord
has_many :posts, dependent: :destroy, foreign_key: "author_id"
has_many :reports, dependent: :destroy
end
model / report.rb
class Report < ApplicationRecord
belongs_to :user
belongs_to :author, class_name: 'User', foreign_key: "author_id"
belongs_to :post
validates :content, :user_id, :post_id, :author_id, presence: true
end
Когда пользователь пытается сообщить о сообщении,пользователю нужно будет ввести content
отчета, и данные будут сохранены на модели Report
.
Это моя Report
структура:
class CreateReports < ActiveRecord::Migration[5.2]
def change
create_table :reports do |t|
t.text :content
t.references :user
t.references :author
t.references :post, foreign_key: true
t.timestamps
end
end
end
Мне удалось сохранить данные в Report
модель / таблицу.Итак, в моем dashboard_controller
я бы хотел, чтобы автор поста заметил, что у него есть некоторые посты, о которых сообщает пользователь, которым необходимо какое-то действие / внимание со своей стороны (редактировать или что-то еще)
controller /dashboard_controller.rb
class DashboardController < ApplicationController
def report
@reports = current_user.posts.reported
#render json: @reports
end
end
В результате отобразится список сообщений, о которых сообщил пользователь.
Мои вопросы:
- Как отобразить
content
изотчет из таблицы reports
? 1036 * Я добавил @reports = current_user.posts.joins(:reports).select("posts.*, reports.*")
в dashboard_controller, он отображает результаты, которые я хотел в json, но когда я пытаюсь выполнить итерацию, как показано ниже, он не отображаетчто-нибудь в представлениях, без ошибок.
<% @reports.each do |report| %>
<h1><% report.content %></h1>
<% end %>
Насколько я знаю, вызов .joins
будет выполнять SQL-запросы (N + 1) вместо .includes
.Мне не удалось заставить его работать, используя .includes
.Это нормально из того, что я сделал?
Или есть ли лучшие решения для того, что я сделал сейчас?
Спасибо!