Ruby on rails 我可以缩小Rails中多态关系检索到的类的类型吗?

Ruby on rails 我可以缩小Rails中多态关系检索到的类的类型吗?,ruby-on-rails,polymorphic-associations,Ruby On Rails,Polymorphic Associations,我在Rails中有一个多态关系,但在一个特定的使用实例中,我只想检索特定类的记录 最好的方法是什么?类地址true 结束 类Person:可寻址 结束 类公司:可寻址 结束 >>c=公司。创建(:name=>“WidgetCo”) >>p=Person.create(:name=>“John Smith”) >>a1=地址。创建(:street=>“123 Foo ST”、:city=>“Barville”、:state\u code=>“MT”、:zip\u code=>“12345”、:ad

我在Rails中有一个多态关系,但在一个特定的使用实例中,我只想检索特定类的记录

最好的方法是什么?

类地址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" ... >]
属于:可寻址,:多态=>true 结束 类Person:可寻址 结束 类公司:可寻址 结束 >>c=公司。创建(:name=>“WidgetCo”) >>p=Person.create(:name=>“John Smith”) >>a1=地址。创建(:street=>“123 Foo ST”、:city=>“Barville”、:state\u code=>“MT”、:zip\u code=>“12345”、:addressable=>p) >>a2=地址。创建(:street=>“321 Contact RD”、:city=>“Bazburg”、:state\u code=>“MT”、:zip\u code=>“54321”、:addressable=>c) >>Address.all(:conditions=>{:addressable_type=>Person.class_name}) => [#]
类地址true
结束
类Person:可寻址
结束
类公司:可寻址
结束
>>c=公司。创建(:name=>“WidgetCo”)
>>p=Person.create(:name=>“John Smith”)
>>a1=地址。创建(:street=>“123 Foo ST”、:city=>“Barville”、:state\u code=>“MT”、:zip\u code=>“12345”、:addressable=>p)
>>a2=地址。创建(:street=>“321 Contact RD”、:city=>“Bazburg”、:state\u code=>“MT”、:zip\u code=>“54321”、:addressable=>c)
>>Address.all(:conditions=>{:addressable_type=>Person.class_name})
=> [#]

rails插件有许多变体可以很好地满足这一目的。您可以定义“getter”来提取属于多态关系的特定数据类型


这有点复杂,文档还可以改进。

rails插件有许多变体可以很好地满足这一目的。您可以定义“getter”来提取属于多态关系的特定数据类型


这有点复杂,文档可以改进。

Mm,我应该澄清一下。这是一种双边多态关系。我有:Users>Permission>Roles,我希望获得用户所属的所有角色,同时剥离权限表上的任何其他记录。User.roles()我可以去:has\u many:roles,:as=>:resource,:through=>:permission???如果模型设置正确,您可能可以使用has\u many:through关联。你能详细介绍一下你的模型吗?嗯,我应该澄清一下。这是一种双边多态关系。我有:Users>Permission>Roles,我希望获得用户所属的所有角色,同时剥离权限表上的任何其他记录。User.roles()我可以去:has\u many:roles,:as=>:resource,:through=>:permission???如果模型设置正确,您可能可以使用has\u many:through关联。你能详细介绍一下你的模型吗?