Анализировать данные отношения многие ко многим в Ruby on Rails - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу создать функцию, в которой пользователь сможет сообщать о публикации, если содержание публикации содержит что-то, что не соответствует рекомендациям.

Что у меня есть:

модель/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

В результате отобразится список сообщений, о которых сообщил пользователь.

Мои вопросы:

  1. Как отобразить content изотчет из таблицы reports? 1036 *
  2. Я добавил @reports = current_user.posts.joins(:reports).select("posts.*, reports.*") в dashboard_controller, он отображает результаты, которые я хотел в json, но когда я пытаюсь выполнить итерацию, как показано ниже, он не отображаетчто-нибудь в представлениях, без ошибок.

    <% @reports.each do |report| %> <h1><% report.content %></h1> <% end %>

  3. Насколько я знаю, вызов .joins будет выполнять SQL-запросы (N + 1) вместо .includes.Мне не удалось заставить его работать, используя .includes.Это нормально из того, что я сделал?

  4. Или есть ли лучшие решения для того, что я сделал сейчас?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...