#ruby-on-rails #ruby-on-rails-3 #activerecord
#ruby-on-rails #ruby-on-rails-3 #activerecord
Вопрос:
Допустим, у меня есть 2 таблицы:
Users
user_id name
Tags
tagger_id tagged_id
Это описывает ситуацию, когда вы можете
И модели, которые я пытаюсь настроить, являются:
class User < ActiveRecord::Base
has_many :tags, :foreign_key => "tagger_id"
end
class Tag < ActiveRecord::Base
belongs_to :tagger, :class => "User"
belongs_to :tagged, :class => "User"
end
Я пытаюсь настроить это так, чтобы, когда я делаю:
user.tags
Он возвращается со списком пользовательских объектов. При моей текущей настройке он возвращается только с фактической записью тега с идентификаторами вместо объектов. Как мне настроить его, чтобы он возвращал список пользовательских объектов?
Я пытался использовать:
has_many :tags, :foreign_key => "tagger_id", :source => :tagged
Но это не сработало.
Комментарии:
1.
user.tags
предполагается, что вы получаете теги, а не пользователей… Вы говорите ему «Дайте мне все теги для этого пользователя». Можете ли вы уточнить, какой именно список пользователей вы ожидаете?
Ответ №1:
Вы ищете has_many :through .
class User < ActiveRecord::Base
has_many :tags, :foreign_key => "tagger_id"
has_many :tagged, :through => :tags
end
Затем user.tagged
должен быть предоставлен список пользователей, которых вы хотите.
Комментарии:
1. Спасибо! Это было просто. Есть ли какой-нибудь способ вернуть вместо этого имя «tags», чтобы я мог использовать user.tags вместо user.tagged для него? Имеет лучшее звучание для этого 🙂
2. Я бы согласился с Max — теги — это теги, а не пользователи. Если вы хотите, вы, вероятно, могли бы определить метод «tags», но я действительно не вижу в этом смысла.