我多次重复这段代码。唯一改变的是条件中的名称。
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)
答案 0 :(得分:6)
我只是将它作为函数添加到您的模型中:
class Model
def self.grafdata(name)
where(name: name).group('dato').map(&:klik)
end
end
然后您可以调用以下任一项:
Model.grafdata('Lars')
Model.grafdata('Hans')
答案 1 :(得分:3)
您可以使用named_scope:
class Model
named_scope :grafdata, lambda {|name| {:conditions => ["name = ?", name], :group => 'dato'}}
end
然后叫:
Model.grafdata('Lars').map(&:klik)
答案 2 :(得分:2)
使用模块
module MyFinders
def grafdata(name)
find(:all, :conditions => {:name => '(name)'}, :group => 'dato').map(&:klik)
end
end
class Foo < ActiveRecord::Base
extend MyFinders
end
HTH
对等
答案 3 :(得分:-2)
而不是'(name)'它应该只是(name)
def self.grafdata(name)
find(:all, :conditions => {:name => (name)}, :group => 'dato').map(&:klik)
end
视图:<%= Reklamer.grafdata('Lars') %>