2017-08-10 81 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

相關問題