Tag: validation

Rails 4 HABTM自定义validation关联

我有一个简单的场景,但我似乎无法找到适用于Rails 4的任何建议的解决方案。我想简单地添加一个自定义validation器来检查我的HABTM关联之间存储的关联量。 更容易说和完成,令我惊讶? 我已经搜索了一个解决方案,但最终只得到了旧版本Rails的答案。 我有以下内容: class User 3 errors.add(:roles, ‘Users can only have three roles assigned.’) return false end end end class Role < ActiveRecord::Base has_and_belongs_to_many :users end 我使用after_save的原因是因为据我所知,存储的关联在添加之后首先可用。 我也尝试编写自定义validation器(例如, validate: :can_only_have_one_role ),但这也不起作用。 我以下面的方式添加关联,并在rails控制台中完成此操作(应该可以正常工作?): user.roles << role 然而,它为用户添加了多个角色,并不关心任何类型的validation。 非常感谢,谢谢!

validation某些操作的模型

我需要仅针对特定操作validation模型(:create)。 我知道这不是一个好策略,但我只需要在我的情况下这样做。 我尝试过使用类似的东西: validate :check_gold, :if => :create 要么 validate :check_gold, :on => :create 但我得到错误。 问题是我无法在编辑时执行自定义check_goldvalidation,但仅在创建时执行(因为只有在创建联盟,而不是编辑联盟时才需要检查黄金)。 Thanx阅读:) 我正在附加一些实际的代码: attr_accessor :required_gold, :has_alliance validate :check_gold validate :check_has_alliance 这是联盟模式。 :required_gold和:has_alliance都在控制器中设置(它们是虚拟属性,因为我需要来自控制器的信息)。 现在,实际的validation器是: def check_gold self.errors.add(:you_need, “100 gold to create your alliance!”) if required_gold < GOLD_NEEDED_TO_CREATE_ALLIANCE end def check_has_alliance self.errors.add(:you_already, "have an alliance and you cannot create another one !") […]

validationRails中多对多关联的唯一性

假设我有Project ,与Tag有多对多关联。 我正在使用has_many,所以我有单独的连接模型。 如何创建validation,检查连接模型的唯一性? 现在我只有 has_many :tags, :through => :taggings, :uniq => true 但这不会在保存时validation。

AJAX Railsvalidation

我的表单和validation与常规的http请求一起工作得很好。 我希望它使用AJAX。 我知道我可以在客户端进行validation,但鉴于我已在模型中定义了validation,这似乎是多余的。 当用户填写表单时,我想就他们的条目向他们提供反馈。 在AJAX表单中使用rails定义的validation并提供实时反馈的最佳方法是什么?

是否应在rails中测试本机validation?

大家都知道自动化测试是件好事。 不是每个人都知道要测试什么。 我的问题是,是否应在应用程序中测试validate_presence_of,validate_uniqueness_of等本机validation。 在我的办公室,我们三个人,一个人认为应该进行测试,一个人认为不应该这样,我在空中。

除了rails活动记录validation中的错误消息之外,还有一种方法可以返回错误代码吗?

在rails activerecordvalidation中,通常如果validation失败,它将在模型的errors属性中添加错误消息,但是我们的客户端要求除了错误消息之外还返回错误代码,例如,我们有一个Bill模型,它具有一个msisdn属性,如果msisdn为null,则错误代码为101,如果msisdn不投诉MSISDN格式,则错误代码为102,当客户端通过REST接口提交请求时,如果validation失败,我们应该返回一个像json的对象 bill: { error_code: 101, error_message: “msisdn can’t be null” } 除了错误消息之外,有没有办法告诉activerecord生成错误代码? 非常感谢。

Railsvalidation上下文

我需要帮助我的ActiveRecord模型。 我使用内置上下文选项进行基于上下文的validation(mis): validates :foo, :on => :bar, :presence => true model = Model.new model.foo = nil model.valid? # => true model.save # works as expected model.valid?(:bar) # => false model.save(:context => :bar) # fails and returns false 但是在accepts_nested_attributes_for :model使用我的模型并调用parent.save失败(validation被调用并返回false),任何建议或解决方案? 仍然没有答案? 为了解释我的问题:我有一个名为Form的模型,它有很多Field 。 用户应该在提交时看到validation错误,但无论如何都应该保存表单(有和没有错误)。 有不同类型的Field ,每个都有全局validation(以确保数据库一致性)和自己特定的用户定义validation(validation用户输入的数据)。 所以我的Field看起来像那样: # Global validations, to ensure database consistency # If […]

validates_presence_of与belongs_to关联,正确的方式

我正在调查validates_presence_of实际上是如何工作的。 假设我有两个模型 class Project < ActiveRecord::Base […] has_many :roles end 和 class Role < ActiveRecord::Base validates_presence_of :name, :project belongs_to :project end 我想要它,以便角色总是属于现有项目,但我只是从这个例子中发现,这可能导致无效(孤立)角色保存到数据库中。 因此,正确的方法是在我的Role模型中插入validates_presence_of :project_id ,它似乎有效,即使我认为在语义上更有意义来validation项目的存在而不是项目ID。 除此之外,如果我只是validationproject_id的存在,我认为我可以放置一个无效的id(对于一个非现有的项目),因为默认情况下AR不会为迁移添加完整性检查,即使我手动添加了一些DB不支持它们(即MySQL与MyISAM或sqlite)。 这个例子certificate了 # with validates_presence_of :name, :project, :project_id in the role class Role.create!(:name => ‘foo’, :project_id => 1334, :project => Project.new) AREL (0.4ms) INSERT INTO “roles” (“name”, “project_id”) VALUES (‘foo’, […]

如何在rails STI派生模型中禁用validation和回调?

给定一个模型 class BaseModel < ActiveRecord::Base validates_presence_of :parent_id before_save :frobnicate_widgets end 和派生模型(底层数据库表有一个type字段 – 这是简单的rails STI) class DerivedModel < BaseModel end DerivedModel将以良好的OO方式inheritanceBaseModel所有行为,包括validates_presence_of :parent_id 。 我想关闭DerivedModel的validation,并防止回调方法被触发,最好不要修改或以其他方式破坏BaseModel 什么是最简单,最强大的方法?

Rails嵌套属性:至少需要两条记录

如何才能使提交产品至少需要两个选项记录? class Product :destroy accepts_nested_attributes_for :options, :allow_destroy => :true, :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } } validates_presence_of :user_id, :created_at validates :description, :presence => true, :length => {:minimum => 0, :maximum => 500} end class Option {:minimum => 0, :maximum => 60} end