我正在尝试创建一个用于在ActiveRecord集合中创建重定向对象的factory_build类方法(请参见下文)。ActiveRecord集合和自定义方法
例如@ website.redirects.factory_build(:code => 301)将返回一个PermenantRedirect对象的新实例。但是,即使我能够调用factory_build类方法,我也无法访问@ web站点的primary_key。有没有办法从一个集合中访问@ website.id,或者我被迫将它传递给方法调用?任何其他建议也会受到欢迎,也许我不会以正确的方式解决这个问题。谢谢。
class Website < ActiveRecord::Base
has_many :redirects
has_many :permenant_redirects
has_many :temporary_redirects
end
# Redirect is an abstract class it uses Rails Single Table Inheritance
class Redirect < ActiveRecord::Base
def self.factory_build(attributes)
status_code = attributes.delete(:code)
case status_code
when 301
Website.find(...).permenant_redirects.new(attributes)
when 302
Website.find(...).temporary_redirects.new(attributes)
else
raise InvalidStatusCodeError
end
end
end
class TemporaryRedirect < Redirect
def status
302
end
end
class PermenantRedirect < Redirect
def status
301
end
end
您能详细阐述一下`Website`和`Redirect`的关系和功能吗? Redirect的不同子类有不同的功能,还是代码的范围? – 2011-02-09 01:17:59