1

我正在尝试在 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

这个好像不太懂~

4

2 回答 2

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

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

于 2010-09-29T20:46:07.143 回答
1

分页参考是一个红鲱鱼。线索是“没有”。will paginate gem 为现有method_missing方法取别名并调用它method_missing_without_pagination。因此,问题是标准缺失方法错误。

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

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

validate :validates_progression

def validates_progression
  true
end
于 2010-09-29T20:50:17.430 回答