Ruby on rails Rails如何创建自己的类方法来保持干燥?
我多次重复这个代码。唯一改变的是条件中的名称Ruby on rails Rails如何创建自己的类方法来保持干燥?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我多次重复这个代码。唯一改变的是条件中的名称 find(:all, :conditions => {:name => 'hans'}, :group => 'dato').map(&:klik) 我试图在模型中创建一些类方法。所以我可以保持干燥 我一直在尝试这个,但它不起作用 def self.grafdata(name) find(:all, :conditions => {:name => '(name)'}, :group => 'da
find(:all, :conditions => {:name => 'hans'}, :group => 'dato').map(&:klik)
我试图在模型中创建一些类方法。所以我可以保持干燥
我一直在尝试这个,但它不起作用
def self.grafdata(name)
find(:all, :conditions => {:name => '(name)'}, :group => 'dato').map(&:klik)
end
错误:未初始化的常量ActionView::CompiledTemplates::Lars
我希望能够编写Model.grafdata(Hans),Model.grafdata(Lars)使用模块
module MyFinders
def grafdata(name)
find(:all, :conditions => {:name => '(name)'}, :group => 'dato').map(&:klik)
end
end
class Foo < ActiveRecord::Base
extend MyFinders
end
模块MyFinder
def grafdata(名称)
查找(:all,:conditions=>{:name=>'(name)},:group=>'dato').map(&:klik)
结束
结束
类Foo
嗯
Peer我只想将其作为一个函数添加到您的模型中:
class Model
def self.grafdata(name)
where(name: name).group('dato').map(&:klik)
end
end
然后,您可以调用以下任一选项:
Model.grafdata('Lars')
Model.grafdata('Hans')
而不是“(名称)”,它只能是(名称)
视图:
您可以使用命名范围:
class Model
named_scope :grafdata, lambda {|name| {:conditions => ["name = ?", name], :group => 'dato'}}
end
然后,我打电话给:
Model.grafdata('Lars').map(&:klik)
模块应该放在哪里?我用错误日志更新了帖子。我如何设置条件和按日期排序?您可以用where(…)设置条件。我的示例将数据库名称与传入的名称相匹配。使用order函数按日期排序:where(…).order('dato DESC').group('dato')…为什么要使用where而不是find?它的作用域是有限的,因此不会立即执行查询,因此很容易对其进行扩展。至少在我看来,它还是一种更干净、更容易阅读的格式。
Model.grafdata('Lars').map(&:klik)