Tag: validation

AuthLogic表单给出了错误的validation错误 – 为什么?

我根据AuthLogic示例设置了AuthLogic for Rails: http ://github.com/binarylogic/authlogic_example。 我可以成功登录到系统,但是当访问users / new.html.erb以注册新用户时,表单会返回以下validation错误: Email is too short (minimum is 6 characters) Email should look like an email address. Login is too short (minimum is 3 characters) Login should use only letters, numbers, spaces, and .-_@ please. Password is too short (minimum is 4 characters) Password confirmation is too short (minimum […]

Rails模型validation条件allow_nil?

所以我想知道我们是否可以在rails模型上使用条件allow_nil选项进行validation。 我想要做的是能够allow_nil取决于一些逻辑(一些其他属性) 所以我有一个产品型号可以保存为草稿。 当被保存为草案时,价格可以是零,但是当不是草稿时,保存价格应该是数字。 我该怎么做到这一点。 以下似乎不起作用。 它适用于草案,但即使状态不是草案也允许为零。 class Product<ActiveRecord::Base attr_accessible :status, price validates_numericality_of :price, allow_nil: :draft? def draft? self.status == "draft" end end 看看rails docs我看起来没有选项将方法传递给allow_nil? 一种可能的解决方案是对两种情况进行单独的validation with_options :unless => :draft? do |normal| normal.validates_numericality_of :price end with_options :if => :draft? do |draft| draft.validates_numericality_of :price, allow_nil: true end 任何其他方法来使这个工作? 谢谢

Rails 3 UJS干客户端+服务器端表单validation

使用jQuery进行表单validation就像向字段添加类名一样简单。 使用rails进行表单validation就像将条件放入控制器(和/或模型)一样简单。 我认为应该有一种方法来编写validation一次,并将它们应用于客户端和服务器端。 我一直都是编写自己的javascript的粉丝,但是如果可以实现这一点,那么使用rails3不引人注目的UJS可能非常值得。 谢谢!!

如何在Rails中的两个表中validation唯一性时避免竞争条件

这个问题讨论了validation两个表的唯一性,并且接受的答案提到“这样的代码级别唯一约束可能在并行请求之间的竞争条件下不起作用,除非这可以在数据库级别完成。” 也就是说,如果你有一个User和一个Organization并且要在两者之间validation一个独特的slug ,你如何在数据库级别确保这一点,或者避免出现竞争条件的可能性? 我唯一的想法是创建一个像Slug这样的相关记录, belongs_to两个模型。 您可以在还创建关联记录的事务中包装这些模型的create和update 。 除非确保存在额外的唯一性约束,否则此记录不会用于任何事情,如果违反此规则,则会在数据库级别引发错误。 有没有更好的方法,还是我走在正确的道路上?

Validates_Overlap Gem多个范围覆盖彼此

我正在使用Validates_Overlap Gem,可以在这里找到: https : //github.com/robinbortlik/validates_overlap 实质是我有两个房间可以预订。 我希望validation在同一房间已经在SAME房间进行确认预订时介入。 如果预订了其他房间,或者预订了相同的房间但尚未确认,则不应该给我一个错误。 到目前为止,我的代码如下 validates :start_time, :end_time, :overlap => { :exclude_edges => [“starts_at”, “ends_at”], :scope => { “bookings.studio_id” => proc {|booking| booking.studio_id}} && { “bookings.is_confirmed” => proc {|booking| booking.is_confirmed == true}} }, on: :update 这将从我的服务器返回以下内容: Booking Exists (0.4ms) SELECT 1 AS one FROM “bookings” WHERE ((bookings.end_time IS NULL OR bookings.end_time […]

自定义消息,validation是否存在无效

我的User模型包含以下内容: validates :password_digest, :presence => true, :message => “The password has to be 6 or more characters long” def password=(password) self.password_digest = BCrypt::Password.create(password) if password.length >= 6 end 问题是validates中的message不起作用。 我得到一个Unknown validator: ‘MessageValidator’错误。 我假设presencevalidation工作的方式是它只检查password_digest为nil , password的长度小于6。我想要一个优雅的解决方案,就像我尝试的那样。 我已经解决了这个问题,但我真的很感激理解为什么我正在尝试的东西不起作用,并且有办法让它发挥作用。 我的工作是: validate do |user| user.errors[‘password’] = “can’t be less than 6 characters” if user.password_digest.nil? end

jQuery-File-Upload内容类型/扩展validation

我正在使用带有rails 3的jQuery-File-Upload,它运行得很好。 但我没有找到任何关于如何在客户端validation上传文件的扩展名或内容类型的内容。 有没有办法做到这一点? 因为我无论如何都会通过Paperclip在server-sidvalidation它,但我认为在客户端进行一次validation会更好。

Rails:如何validation只有一对多关系的多边记录被标记为主要记录

我在我的Rails应用程序中设置了一对多关系: Person有很多Addresses 。 我在我的Addresses表中添加了一个名为is_primary 。 如何通过validation强制执行只有一个地址将is_primary设置为true? 基本上我想说:对于所有具有is_primary为Person和addressable_id为X Addresses行,只有一个可以将is_primary设置为true 。 如果不是这种情况,请拒绝保存并抛出表单validation错误。

validates_inclusion_of,acts_as_tree和rspec的问题

我有问题让rspec正常运行以测试validates_inclusion_of我的迁移如下所示: class CreateCategories < ActiveRecord::Migration def self.up create_table :categories do |t| t.string :name t.integer :parent_id t.timestamps end end def self.down drop_table :categories end end 我的模型看起来像这样: class Category Category.all.map(&:id), :unless => Proc.new { |c| c.parent_id.blank? } end 我的工厂: Factory.define :category do |c| c.name “Category One” end Factory.define :category_2, :class => Category do |c| c.name “Category Two” […]

将字段名称作为参数传递给自定义validation方法Rails 4

我有一个自定义validation方法: def my_custom_validation errors.add(specific_field, “error message”) if specific_field.delete_if { |i| i.blank? }.blank? end 目标是禁止包含[“”]参数通过validation,但我需要调用此方法,如: validate :my_custom_validation #and somehow pass here my field names 例如: validate :my_custom_validation(:industry)