我有多态关联的模型。
class Tag < ActiveRecord::Base
#attributes target_id, target_type
belongs_to :target, polymorphic: true
end
目标模型,即用户。
class User < ActiveRecord::Base
has_many :tags, as: :target
end
但方法@user = User.find params[:id]; @user.tags
会返回#<ActiveRecord::Associations::CollectionProxy []>
,而Tag.where(target_id: @user.id, target_type: 'User')
会返回除了我之外的某些对象。
怎么了?
答案 0 :(得分:0)
这是一种错误的方式,因为它会给出NameError: undefined local variable or method user for main:Object
之类的错误,首先你必须找到用户及其标签,如:
@user=User.find(1)
@user.tags
答案 1 :(得分:0)
从User
模型的实例中,您可以像这样检索tags
的集合:
@user = User.find(params[:id])
@user.tags
同样,如果您拥有Tag
模型的实例,则可以访问其父模型:
@tag.target
答案 2 :(得分:0)
问题解决了!
我只是添加到模型foreign_key
。
class User < ActiveRecord::Base
has_many :tags, as: :target,
foreign_key: target_id
end
谢谢大家,他们试图提供帮助。