레일즈 애플리케이션에 각각 사용자 정의 구현이있는 여러 제공자가 있습니다.Ruby on Rails : 구현이 다른 모델
제공자는 모두 DB에 저장되며, 데이터에 따라 DB에서 객체를로드 할 때 선택해야 할 구현이 결정되어야합니다.
여기에 나와있는 해결책이 있습니다.
/app/models/provider.rb
class Provider < ActiveRecord::Base
attr_accessible :name
validates :name, :presence => true
after_find :load_implementation
# Loads the correct implementation for the provider
def load_implementation
case self.name
when "FirstProvider"
extend FirstProvider
when "SecondProvider"
extend SecondProvider
else
raise "No implementation for provider #{self.name}"
end
end
end
는 /lib/first_provider.rb 여기 /lib/second_provider.rb
module SecondProvider
def foo
puts "bar"
end
end
그리고
module FirstProvider
def foo
puts "foo"
end
end
은 어떻게 그것을 사용하십시오 :
Providers.all.each do |p|
p.foo
end
이 솔루션을 사용하는 데 문제가 있습니까? 이 일을 더 적절하게 생각할 수 있습니까?
그게 내가 찾고 있던거야. 구현 파일은'app/models /'에 있어야 하는가? – nbarraille
예 그들은 거기에 위치해야합니다! –