У меня есть модель комментариев, которая представляет собой полиморфную ассоциацию, которая связана со статусами и фотографиями. Как я могу создать эту полиморфную ассоциацию, чтобы она также принадлежала пользователю, чтобы, когда пользователь создает комментарий под статусами или фотографиями, он также получал идентификатор current_user?
Это то, что у меня есть сейчас -
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
belongs_to :user
end
class User < ActiveRecord::Base
has_many :comments
end
class Status < ActiveRecord::Base
has_many :comments, as: :commentable
end
class Photo < ActiveRecord::Base
has_many :comments, as: :commentable
end
Повторюсь, как я могу создать комментарий как пользователь, но также разместить его под статусом или фотографией? ему потребуется user_id.
Вот где у меня проблема - как мне это настроить?
def create
@comment = @commentable.comments.new(comments_params)
if @comment.save
redirect_to @commentable, notice: "Comment created"
else
render :new
end
end
2 ответа
Это немного взломано, но я нашел обходной путь. Итак, в моем CommentsController я сделал следующее:
def create
new_params = comments_params
new_params[:user_id] = current_user.id
@comment = @commentable.comments.build(new_params)
if @comment.save
redirect_to @commentable, notice: "Comment created"
else
render :new
end
end
Это поместило user_id, что мне было нужно.
Попробуй это
class Comment < ActiveRecord::Base
belongs_to :likable, :polymorphic => true
belongs_to :commentable, :polymorphic => true
belongs_to: user
class User < ActiveRecord::Base
has_many :statuses, :as => :likable
has_many :photos, :as => :commentable
has_many :comments
class Status < ActiveRecord::Base
has_many :comments, :as => :likable, :dependent => :destroy
class Photos < ActiveRecord::Base
has_many :comments, :as => :commentable, :dependent => :destroy
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.