2009-06-28 39 views

回答

0

rails插件has_many_polymorphs可以很好地适应这个目的。您可以定义“getters”来提取特定数据类型,这些类型是多态关系的一部分。

这是有点复杂,但文件可以负担得起改善。

1
class Address < ActiveRecord::Base 
    belongs_to :addressable, :polymorphic => true 
end 

class Person < ActiveRecord::Base 
    has_many :addresses, :as => :addressable 
end 

class Company < ActiveRecord::Base 
    has_many :addresses, :as => :addressable 
end 

>> c = Company.create(:name => "WidgetCo") 
>> p = Person.create(:name => "John Smith") 
>> a1 = Address.create(:street => "123 Foo ST", :city => "Barville", :state_code => "MT", :zip_code => "12345", :addressable => p) 
>> a2 = Address.create(:street => "321 Contact RD", :city => "Bazburg", :state_code => "MT", :zip_code => "54321", :addressable => c) 
>> Address.all(:conditions => { :addressable_type => Person.class_name }) 
=> [#<Address id: 1, street: "123 Foo ST" ... >] 
+0

嗯,我应该澄清。这是一种双面多态关系。 我有: 用户>权限>角色 我想获取用户所属的所有角色,同时删除权限表中的任何其他记录。 User.roles() 我可以走: 的has_many:角色:为=>:资源:通过=>:许可???? – 2009-07-01 05:18:27

相关问题