#ruby-on-rails
#ruby-on-rails
Вопрос:
Существует 3 модели, скажем, Article, Picture и Comment. Комментарий — это, конечно, полиморфная модель.
Теперь я могу сделать что-то вроде @article.comments и захватить комментарии, но если у меня есть комментарий, как я могу узнать, происходит ли он из статьи или рисунка? База данных содержит только идентификатор. Я пробовал это (http://guides.rubyonrails.org/association_basics.html#polymorphic-associations ), но только что получил обратно nil для commentable.
Кроме того, как я могу переместить комментарий к картинке в комментарий к статье? Комментарий привязан к определенному идентификатору статьи в commentable_id, как я могу изменить этот конкретный комментарий, чтобы он стал комментарием к определенному изображению?
РЕДАКТИРОВАТЬ: Я ПРОБОВАЛ ЭТО И НЕ СРАБОТАЛО
ruby-1.9.2-p180 :001 > user = User.find_by_username('name')
ruby-1.9.2-p180 :002 > user.owned_items
=> [#<OwnedItem id: 81233384, ownable_id: 861022540, user_id: 986759322, ...
ruby-1.9.2-p180 :003 > user.owned_items[0].ownable
=> nil
Ответ №1:
def Article < ActiveRecord::Base
has_many :comments, :as => :commentable
end
def Picture < ActiveRecord::Base
has_many :comments, :as => :commentable
end
def Comment < ActiveRecord::Base
belongs_to :commentable, :polymorpic => true
end
Но вы, вероятно, уже зашли так далеко 😉 Теперь вы можете сделать что-то вроде comment.where(:commentable_type => 'Event').commentable
, и это вернет событие для комментария.
Комментарии:
1. Иван, я действительно пробовал это (я упоминаю об этом в вопросе). Я отредактирую выше, чтобы показать. Комментарий был здесь просто примером, поэтому я буду использовать другие названия моделей, но это проиллюстрирует.