All*_*ate 22 activerecord scope rspec ruby-on-rails activemodel
我想通过将共享范围移动到模块中来干掉几个模型,例如:
module CommonScopes
extend ActiveSupport::Concern
module ClassMethods
scope :ordered_for_display, order("#{self.to_s.tableize}.rank asc")
end
end
Run Code Online (Sandbox Code Playgroud)
我还想创建测试模块的共享规范.不幸的是,当我尝试在我的模型中包含共享范围时,我得到:
undefined method `order' for CommonScopes::ClassMethods:Module
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢!
mde*_*lin 51
与rails 4 作用域语法一样,您可以简单地使用lambda来延迟代码的执行(也可以在rails 3中运行):
module CommonScopes
extend ActiveSupport::Concern
included do
scope :ordered_for_display, -> { order("#{self.to_s.tableize}.rank asc") }
end
end
Run Code Online (Sandbox Code Playgroud)
Gaz*_*ler 13
您可以使用instance_eval
module CommonScopes
extend ActiveSupport::Concern
def self.included(klass)
klass.instance_eval do
scope :ordered_for_display, order("#{self.to_s.tableize}.rank asc")
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6470 次 |
| 最近记录: |