【问题标题】:Paginate throws error for Custom ValidationsPaginate 为自定义验证引发错误
【发布时间】:2010-09-29 20:05:34
【问题描述】:

我正在尝试在 Rails 2.3.5 中为我的一个模型创建自定义验证,但每次运行我的测试套件时都会收到以下错误:

`method_missing_without_paginate': undefined local variable or method `validates_progression'

app/models/project.rb

class Project < ActiveRecord::Base
   ...
   validates_progression

   def validates_progression
      true # stubtastic!
   end
end

我好像不太喜欢这个~

【问题讨论】:

    标签: ruby-on-rails validation testing rspec will-paginate


    【解决方案1】:

    它不起作用,因为您正在定义一个具有实例范围的方法,并且您试图在类范围内调用它。你有两种选择:

    实例范围

    class Project < ActiveRecord::Base
    
      validate :validates_progression
    
      def validates_progression
         true # stub
      end
    
    end
    

    类范围

    class Project < ActiveRecord::Base
    
      def self.validates_progression
         true # stub
      end
    
      # Be sure to define this method before calling  it
      validates_progression
    
    end
    

    除非您想包装其他过滤器,否则第二种选择实际上没有意义。

    class Project < ActiveRecord::Base
    
      def self.validates_progression
         validates_presence_of :progression
         validates_length_of ...
      end
    
      # Be sure to define this method before calling  it
      validates_progression
    
    end
    

    否则,请使用第一个解决方案。

    【讨论】:

      【解决方案2】:

      分页参考是红鲱鱼。线索是“没有”。 will paginate gem 为现有的method_missing 方法加上了别名,并将其命名为method_missing_without_pagination。所以,问题是标准缺失方法错误。

      该方法丢失是因为 a) 在您调用它时未定义 b) 不在正确的范围内(您试图在类的范围内调用实例方法)。

      您可以使用 validate 和您的验证方法的符号来添加您的自定义验证:

      validate :validates_progression
      
      def validates_progression
        true
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-08
        • 1970-01-01
        • 2011-06-15
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 2013-05-02
        • 1970-01-01
        相关资源
        最近更新 更多