代码之家  ›  专栏  ›  技术社区  ›  Dave

在我的应用程序中定义finder方法时遇到问题

  •  0
  • Dave  · 技术社区  · 9 年前

    我使用的是Rails 4.2.3和MySQL 5.5.37。我想为我的模型编写一个finder方法,所以我写了这个(./app/models/user_object.rb):

    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
    

    然而,当我试图在这样的控制器中调用该方法时

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

    我得到以下错误

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

    定义finder方法的正确方法是什么?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Ilya    9 年前

    使用 self.method 要定义类方法:

    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
    

    在这种情况下 UserObject 类内方法定义是多余的,因为它与 self 。现在你可以写:

    UserObject.find_total_by_user_object_and_year(params)