2016-02-12 1 views
0

J'utilise Rails 4.2.3 et MySQL 5.5.37. Je veux écrire un méthode de recherche pour mon modèle, donc je l'ai écrit (./app/models/user_object.rb):Problème de définition de la méthode finder dans mon application

class UserObject < ActiveRecord::Base 

    validates :day, :presence => true 
    validates_numericality_of :total 
    validates :object, :presence => true 

    def find_total_by_user_object_and_year 
    UserObject.sum(:total, :conditions => ['user_id = ?', params[:user_id], 'object = ?', params[:object], 'year(day) = ?', params[:year]]) 
    end 

end 

Cependant, lorsque je tente d'invoquer la méthode dans un contrôleur comme si

@my_total = UserObject.find_total_by_user_object_and_year(session["user_id"], 3, @year) 

je reçois l'erreur suivante

undefined method `find_total_by_user_object_and_year' for #<Class:0x007fb7551514e0> 

Quelle est la bonne façon de définir ma méthode de recherche?

Répondre

2

Utilisez self.method pour définir la méthode de classe:

def self.find_total_by_user_object_and_year 
    sum(:total, :conditions => ['user_id = ?', params[:user_id], 'object = ?', params[:object], 'year(day) = ?', params[:year]]) 
end 

Dans ce cas UserObject dans la définition de méthode de classe est redondant, il est besause même que self. Maintenant, vous pouvez écrire:

UserObject.find_total_by_user_object_and_year(params)