Я пытаюсь подключить создание комментария к 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
?