Rails, как создать метод класса self, чтобы сохранить вещи сухими? - PullRequest
2 голосов
/ 19 февраля 2011

Я повторяю этот код много раз. Единственное, что меняется - это название в условиях.

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)

Ответы [ 4 ]

6 голосов
/ 19 февраля 2011

Я бы просто добавил это как функцию к вашей модели:

class Model
  def self.grafdata(name)
    where(name: name).group('dato').map(&:klik)
  end
end

Затем вы можете позвонить любому из следующих:

Model.grafdata('Lars')
Model.grafdata('Hans')
3 голосов
/ 19 февраля 2011

Вы можете использовать named_scope:

class Model

  named_scope :grafdata, lambda {|name| {:conditions => ["name = ?", name], :group => 'dato'}}

end

Затем позвонил:

Model.grafdata('Lars').map(&:klik)
2 голосов
/ 19 февраля 2011

Использовать модуль

module MyFinders
  def grafdata(name)
    find(:all, :conditions => {:name => '(name)'}, :group => 'dato').map(&:klik)
  end
end

class Foo < ActiveRecord::Base
  extend MyFinders
end

НТН

Peer

0 голосов
/ 19 февраля 2011

Вместо '(имя)' должно быть только (имя)

def self.grafdata(name)
    find(:all, :conditions => {:name => (name)}, :group => 'dato').map(&:klik)
end

А вид: <%= Reklamer.grafdata('Lars') %>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...