Paginate为自定义验证抛出错误

时间:2010-09-29 20:05:34

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

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

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

应用程序/模型/ project.rb

class Project < ActiveRecord::Base
   ...
   validates_progression

   def validates_progression
      true # stubtastic!
   end
end

我似乎无法做到这一点〜

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

分页参考是红鲱鱼。线索是'没有'。将paginate gem设置为现有method_missing方法的别名并将其命名为method_missing_without_pagination。因此,问题是标准缺失方法错误。

该方法缺失,因为它是a)在你调用它时没有定义,b)没有在正确的范围内(你试图在类的范围内调用实例方法)。

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

validate :validates_progression

def validates_progression
  true
end