【问题标题】: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