2017-08-10 35 views
0

假设我有这三种模式是否可以构建动态可链接范围?

class Plant < ActiveRecord::Base 
    has_many :pots 
    has_many :fertilizers 
end 

class Pot < ActiveRecord::Base 
    belongs_to :plant 
end 

class Fertilizer < ActiveRecord::Base 
    belongs_to :plant 
end 

每个人都有的grouped_by的属性。

是否有可能制造出能在任年底施加grouped_as范围:

@plant.pots.grouped_as('outdoors') 
@plants.fertilizers.grouped_as('outdoors') 

,这样我可以添加grouped_as作为一个可链接的范围,任何关系,它会自动地寻找Plant及其动态子女之间的共同属性,potsfertilizers ..

或者我是否需要为每个人定制一个范围?

+0

您是否希望Plant上的作用域根据其'grouped_by'属性返回Fertilizer和/或Pot记录? – MrYoshiji

+0

我想我只是想通了。它具有通用的命名关联扩展。我将发布回答 – Trip

回答

0

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

的想法是使用协会扩展和然后将它们分离,以共享模块。

module FindOrCreateByNameExtension 
    def find_or_create_by_name(name) 
    first_name, last_name = name.split(" ", 2) 
    find_or_create_by(first_name: first_name, last_name: last_name) 
    end 
end 

class Account < ActiveRecord::Base 
    has_many :people, extend: FindOrCreateByNameExtension 
end 

class Company < ActiveRecord::Base 
    has_many :people, extend: FindOrCreateByNameExtension 
end 
+1

FWIW,一个稍微简洁的语法:'has_many:people,extend:FindOrCreateByNameExtension' –

+0

非常感谢你这么多! – Trip

相关问题