Tag: validation

Rails更大 – 根据模型属性进行模型validation

我有一个Trip模型,其中包含start_odometer和end_odometer值。 在我的模型中,我想validation结束里程表是否比起始里程表大。 结束里程表也可以是空白的,因为旅行可能尚未完成。 但是,我无法弄清楚如何将一个属性与另一个属性进行比较。 在trip.rb中: 与符号比较: validates_numericality_of :end_odometer, :greater_than => :start_odometer, :allow_blank => true 给我错误: TripsController中的ArgumentError #index :greater_than必须是一个数字 与变量比较: validates_numericality_of :end_odometer, :greater_than => start_odometer, :allow_blank => true TripsController中的NameError #index 未定义的局部变量或方法`start_odometer’for#

如何针对特定范围validation模型的日期属性(在运行时评估)

我有几个带有日期属性的模型,对于每个模型,我想根据给定的范围validation这些日期。 一个基本的例子是: validates_inclusion_of :dated_on, :in => Date.new(2000,1,1)..Date(2020,1,1) 理想情况下,我想在运行时使用与named_scope使用类似的方法来评估日期范围,例如: validates_inclusion_of :dated_on, :in => lambda {{ (Date.today – 2.years)..(Date.today + 2.years)}} 上述方法当然不起作用,那么实现相同结果的最佳方法是什么?

使用RSpec测试密码长度validation

我正在编写一些unit testing,以确保用户模型的密码长度不超过8个字符。 我开始使用User模型: class User { :minimum => 90, :too_short => “password is too short, must be at least %{count} characters” }, :on => :create end 和user_spec.rb测试: describe User do subject { FactoryGirl.build :user } its(:password) { should have_at_least(8).items } end 但是我意识到这实际上并没有测试我的validation,只是测试我的工厂有一个> = 8个字符的密码。 除了测试有效之外,还有一种很好的方法吗? 0-7字符密码的方法? 我的理论是,如果我只测试7个字符,并且有人意外硬编码4个字符密码就可以了,这将通过validation,但实际上不是预期的。 可能有一些代码,其中取决于密码超过8个字符(不太可能,但在其他情况下可能是真的),因此允许密码4是不正确的。 在这种情况下,在模型中更改密码validation的人将不知道他们做错了什么。 我只想知道如何使用TDD正确测试这样的情况。

Railsvalidation日期范围的唯一性

我有一个涉及员工缺勤记录的申请。 我需要确保每条记录的开始和结束日期不重叠。 因此,例如,如果我输入了今天开始并明天结束的缺席记录,则不应该以任何方式在该日期范围内输入另一个记录。 所以我不能制作一个在今天前一天开始,然后在后天或之后的任何日期结束。 简单地说,我需要使日期范围独特。 实现这一目标的最佳方法是什么? 模型类中涉及遍历所有记录的自定义validation器需要很长时间才能完成,而且我没有找到任何解决此问题的gem。 我也没有找到任何简单的方法来确定模型中的唯一性。 我很难过:/ 谢谢你的时间! 编辑: class Absence true, :message => “can only be whole number.” end

Ruby on Rails / Devise – 在重置密码时绕过模型中的自定义validation选项

在我的项目中,我修改了Devise中的注册表单,通过访问者添加:agree选项(用户必须接受注册的服务条款等)。 如果他们不同意,则不会进行validation。 当用户试图编辑他们的帐户信息时,这导致了一个问题,因为它找到了:同意validation,但我能够添加一个’unless’子句并添加另一个名为:signed_in的访问器,它在控制器中定义(我无法’弄清楚如何让模型确定用户是否已登录,设计的助手对我来说不起作用)。 我的User模型和users_controller的相关部分看起来像…… user.rb validates :agree, :term_agreement => TRUE, :unless => :signed_in users_controller.rb def update @user = User.find(params[:id]) if user_signed_in? @user.signed_in = params[:user] end […] end 所以,一切正常……当用户已经登录时,“同意”validation会覆盖。但是,我必须找出覆盖其他方案的最佳方法…当用户重置密码并需要更改时它。 我正在测试用户帐户,并试图在一个帐户上重置我的密码,但是我遇到了:同意validation…现在我必须找到一种方法来覆盖它。 我注意到更改密码表单的隐藏字段值为:reset_password_token,但我尝试过:除非=>:reset_password_token但它不起作用。 那么实现这个目标的最佳方法是什么? 除此之外,我怎么能有一个/或条件(除非:signed_in或:reset_password等):except子句?

rails对特定控制器和操作的ActiveRecordvalidation

是否可以在给定的控制器和操作上运行ActiveRecordvalidation。 例如,我有user_controller和signup_controller 我只需要在signup_controller #create action上运行密码必需的validation

Rails:如果存在值,如何validation格式?

我想validation表单值的格式,允许空值或需要特定格式。 要根据格式validation值,这可以正常工作: validates :application_bundle_identifier, :format => { :with => /^[a-zA-Z0-9.-]+$/, :message => “A bundle identifier should contain only alphanumeric (AZ,az,0-9), hyphen (-), and period (.) characters.” } 现在,我想允许用户根本不输入值。 在这种情况下,我可以将正则表达式调整为^[a-zA-Z0-9.-]*$ ,但这似乎不是一个非常好的Rails方式。 根据格式,可能不可能,或者至少不太清楚。 在这种情况下,最佳做法是什么?

在Rails应用程序中为Devise视图/模型添加其他字段和validation

我生成了默认的设计视图: rails generate devise:views 然后我在views/devise/registrations/new.html.erb表单中添加了一个username views/devise/registrations/new.html.erb 。 目前,仅进行email和passwordvalidation。 如何validationusername段的状态和唯一性? 我是否需要在User模型中添加一些内容?

如何简单地validationrails中的复选框

你如何简单地validation在rails中检查了一个复选框? 该复选框用于最终用户协议。 它位于一个模态窗口中。 让我们说我有复选框: 我应该在哪里以及如何validation这一点? 我在这里看到了关于rails中复选框validation的大多数post,但它们都不适合我的需求。

在Rails中显示链接表单错误消息

在我们的注册表格中,我们validates_uniqueness_of :email 当用户尝试使用我们的注册表单并指定现有的电子邮件地址时,我希望他们看到这样的错误消息 该邮件地址已被使用。 如果您在登录时遇到问题,可以重置密码 显然,我想使用命名路由作为链接,但我的用户模型无法访问它。 我怎么能做到这一点? 附注:我们将很快为我们的应用程序提供翻译,所有这些错误消息将最终出现在YAML文件中。 我可以以某种方式在我的YAML语言环境文件中的消息中注入new_password_url吗? (例如, config/locales/en.yml )