开发者

polymorphic rails association fails on inherited class?

开发者 https://www.devze.com 2023-02-06 19:05 出处:网络
I\'m having trouble doing the reverse polymorphic association when I have an inherited class.Anyone know what\'s going on?

I'm having trouble doing the reverse polymorphic association when I have an inherited class. Anyone know what's going on?

ruby-1.9.2-rc2 > Label.first
 => #<Label id: 1, owner_id: 1, owner_type: "Student", name: "Lorem", created_at: "2011-01-23 05:02:29", updated_at: "2011-01-23 05:02:29"> 
ruby-1.9.2-rc2 > Label.first.owner
 => #<Student id: 1, email: "alice1@example.com", ...,  avatar_updated_at: nil> 
ruby-1.9.2-rc2 > Label.first.owner.labels
 => [] 

class Student < User
  has_many :labels, :as => :owner


class Label < ActiveRecord::Base
  belongs_to :owner, :polymorphic => true

Note: just for good measure (not that this should be any different, but 开发者_开发知识库just in case...)

User.find(1).labels
 => [] 

Also

l = Label.find(4)
 => #<Label id: 4, owner_id: 2, owner_type: "Student", name: "sit", created_at: "2011-01-23 05:02:29", updated_at: "2011-01-23 05:02:29"> 
ruby-1.9.2-rc2 > l.owner_type = "User"
 => "User" 
ruby-1.9.2-rc2 > l.save
 => true 
ruby-1.9.2-rc2 > Student.find(2).labels
 => [#<Label id: 4, owner_id: 2, owner_type: "User", name: "sit", created_at: "2011-01-23 05:02:29", updated_at: "2011-01-23 07:13:37">] 


Still not sure why it was failing (well, I can guess, given the Student/User dichotomy), but for future reference this hack works:

has_many :labels, :conditions => ["owner_type = ?", "Student"], 
                          :foreign_key => "owner_id"
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号