Rails: создайте связь между комментарием и пользователем - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь подключить создание комментария к current_user. У меня есть модель comment, которая является полиморфной c ассоциацией.

class CreateComments < ActiveRecord::Migration[6.0]
  def change
    create_table :comments do |t|
      t.string :content
      t.references :commentable, polymorphic: true
      t.timestamps
    end
  end
end

В контроллере я пытаюсь подключить @comment.user = current_user. controllers / comments_controller.rb

  def create
    @comment = @commentable.comments.new comment_params
    @comment.user = current_user
    @comment.save
    redirect_to @commentable, notice: 'Comment Was Created'
  end

Но я получаю следующую ошибку:

NoMethodError: неопределенный метод `user = 'для # Вы имели в виду? user_id =

Я бы предпочел установить отношение, из которого я могу получить пользователя (создателя комментария) из самого комментария. Например @comment.user вместо того, чтобы просто иметь идентификатор.

У меня есть следующие модели:

class Question < ApplicationRecord
  belongs_to :user
  has_many :comments, as: :commentable
  has_rich_text :content
end

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :posts
  has_many :questions
  has_one_attached :avatar

  before_create :set_defaults

  def set_defaults
    self.avatar = 'assets/images/astronaut.svg' if self.new_record?
  end
end

class Comment < ApplicationRecord
  belongs_to :commentable, polymorphic: true
end

Поскольку comment является ассоциацией полиморфизма c, я не уверен если он должен быть подключен к пользователю через belongs_to к user.

[5] pry(#<Questions::CommentsController>)> @comment
=> #<Comment:0x00007fb3e6df72e8
 id: nil,
 content: "some test content",
 commentable_type: "Question",
 commentable_id: 1,
 created_at: nil,
 updated_at: nil,
 user_id: nil>
[6] pry(#<Questions::CommentsController>)>

Означает ли это, что я должен создать foreign_key при comments миграции на пользователя? Как я могу go получить автора комментария от самого комментария? Что-то вроде @comment.creator или @comment.user?

1 Ответ

3 голосов
/ 09 января 2020

В вашей user модели добавьте

has_many :comments

, а в вашей comment модели добавьте

belongs_to :user

, тогда вы можете сделать

@comment.user
@user.comments

, но если вы хотите получить user только от comments, а не наоборот, вы можете добавить belongs_to :user в comment.

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