在ActiveRecord::Base
子类中,我想为一个字段设置别名,因为在新类中有一个具有不同名称的等效字段。例如,我做了类似的事情:
class OldClass < ActiveRecord::Base
alias_attribute :new_style_id, :id
end
class NewClass < ActiveRecord::Base ; end
new_style_id
,作为NewClass
上的字段,有一个类似find_by_new_style_id
的查找器,但alias_attribute
没有为OldClass
创建类似的结果,因此在find_by_new_style_id
上调用时,尝试调用OldClass
会引发未定义的方法异常。如果只是将find_by_new_style_id
添加到OldClass
,是否可以让Rails自动为别名生成查找程序,以便OldClass
和NewClass
都能响应{{1} }}?
答案 0 :(得分:1)
您需要的是范围:
scope : find_by_new_style_id, -> (new_style_id){ where( 'style_id=?', new_style_id ) }
如果您需要在多个课程中使用它,您可以使用一个问题。
module StyleScope
extend ActiveSupport::Concern
included do
scope : find_by_new_style_id, -> (new_style_id){ where( 'style_id=?', new_style_id ) }
end
end
在你的模特中:
ìnclude StyleScope
http://api.rubyonrails.org/classes/ActiveSupport/Concern.html http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html#method-i-scope