Tag: validation

关联模型和嵌套表单,validation不起作用

Update2:我已经清理了代码,这似乎已经解决了一些问题。 我在这里发布了新代码作为一个新问题。 更新:组织和用户有1:多关系。 我的问题涉及一个联合注册表单,其中需要组织和用户。 在maxcal对原始post的帮助之后,我为我的嵌套表单编写了一个新的create方法(“组织有很多用户”),如下所示。 我还添加了begin…rescue…end create方法。 现在的情况/问题: 提交所有有效信息,它正常工作。 提交组织的无效信息(如果用户也无效,则无关紧要),它会按照我们的意愿呈现包含错误消息的页面,但它仅显示组织详细信息的错误。 此外,对于用户详细信息,它已经清空了所有字段,它不应该。 仅为用户提交无效信息,它再次呈现表单但没有任何错误消息,并且用户的所有字段都已清空。 任何人都知道代码有什么问题? 对于嵌套用户而言,问题似乎与组织(父组件)相关。 users_attributes.empty? 不起作用,因为根据日志,空提交的表单仍然包含这些属性: Parameters: {“utf8″=>”✓”, “authenticity_token”=>”***”, “organization”=>{“name”=>””, “bag”=>””, “users_attributes”=>{“0″=>{“email”=>””, “username”=>””, “password”=>”[FILTERED]”, “password_confirmation”=>”[FILTERED]”, “usertype”=>”2”, “admin”=>”true”}}}, “commit”=>”Register”} 。 def create @organization = Organization.new(new_params.except(:users_attributes)) begin if users_attributes.empty? @organisation.errors.add(:users, ‘No user provided’) end @organization.transaction do @organization.save! if users_attributes.any? @organization.users.create!(users_attributes) end end rescue ActiveRecord::RecordInvalid => invalid if […]

Ruby / Rails – 如何validation小数位?

如何validation小数的比例? 例如,假设我们想要存储小数点后最多2个小数点的酒店的评级。 4.34。 3.76。 等等 我已经在线阅读了基于你与列绑定的精度/比例的截断的sqlite。 因此,如果你有一个精度3,比例2,并输入1.34567 1.35将被存储。 但是,我正在使用postgres而事实并非如此。 我输入了这个,尽管我的精确度为3,但数据库仍以某种方式存储了全部内容。 t.decimal :my_column, precision: 3, scale: 2 那么,我如何validation这种事情,为什么postgres存储超过2个小数点开始?

Rails 4 date_field,min和max year?

我试图使用rails 4方法”date_field”为我的表单设置最大年份值因为用户似乎可以输入大于4位的年份。 我一直试图像这样使用它,但它似乎没有任何影响。

Ruby中的动态validation和元编程

我正在尝试开发一个应用程序,该应用程序可以向不同的用户提供相同的资源,并且资源可能具有基于用户的不同validation行为。 我曾尝试使用Ruby元编程以简单的方式解决这个问题,但看起来我缺少一些关于此事的关键知识。 我可以通过诸如此类的模型来举例说明 class Profile < ActiveRecord::Base # validates_presence_of :string1 end 该模型有一个属性’string1’,有时是必需的,有时不是。 我想为每个用户创建子类(由于此简化中不明显的原因)并创建了一个我想要包含的模块: module ExtendProfile def self.included(base) base.extend(ClassMethods) end module ClassMethods def configure_validation(required) if required class_eval(“ActiveRecord::Base.validates_presence_of :string1”) end end end end 它的唯一目的是添加一个方法,根据给定的参数添加条件validation。 当使用一个为true的参数调用时,它会添加validation,但它不会干净地执行。 看起来它并没有像我想象的那样分离子类。 它可以通过以下测试来说明: profile = Profile.new profile.save; profile.errors => [] 默认情况下,配置文件可以保存而不会出错。 Object::const_set(‘FirstExtendedProfile’.intern, Class::new(Profile) { include ExtendProfile }) FirstExtendedProfile.configure_validation(true) fep = FirstExtendedProfile.new; fep.save; fep.errors […]

Rails 4.模型中的国家validation

我正在创建rails API,并希望为国家/地区字段添加validation,其中包含模型级别的ISO 3166-1代码。 例如,如果使用gem carmen-rails ,它只提供helper country_select 。 是否可以在模型中使用ISO 3166-1代码的国家validation?

如何在记录更新期间从validation中排除密码字段? (Rails 3.0.4,Ruby 1.9.2)

我有一个允许更新用户记录的表单。 它包含以下字段:password和:password_confirmation但如果加密密码已存储在数据库中,我不希望在它们上运行validation。 视图文件中的字段: ‘Confirm Password’ %> 在搜索互联网时,我发现了一些代码,我假设它是以前版本的Ruby / Rails。 (我会在我的用户模型中放置。) validates_presence_of :password, :on => create 由于我的用户模型中的密码validation语法不同(下面),我对我需要的语法感到困惑。 validates :password, :presence => true, :confirmation => true 我搜索了其他post,肯定可以使用一些方向。 – 免责声明 – 我确实看到有关于条件validation的屏幕演员,但我现在无法观看。 谢谢,所有。 编辑 – 插入以下代码,它允许用户记录更新,而不会抱怨缺少密码字段。 validates :password, :presence => true, :confirmation => true, :on => :create

当某些属性可能被标记为销毁时,用于validation嵌套属性的唯一性

我有以下(消毒过的)模型: class Person < ActiveRecord::Base attr_accessible :name, :first_name, :last_name, :age, :job_title, :salary, :ssn, :prison_convictions, :addresses_attributes has_many :addresses, inverse_of: :person accepts_nested_attributes_for :addresses, allow_destroy: true end class Address < ActiveRecord::Base attr_accessible :zip_code, :street,:house_number, :unique_per_person_government_id belongs_to :person, inverse_of: :addresses validates_uniqueness_of :unique_per_person_government_id, scope: :person_id end 问题如下, 让我们说人Joe Shmoe目前有两个地址附在自己身上 666 Foo Street,12345,唯一ID:“ABCDEFG”和777 Lucky Avenue,54321,唯一ID:“GFEDCBA” 并且让我们说以下post来自一个表单: {:addresses_attributes => { [0] => […]

RefineryCMS Engines错误:没有有效的gemspec

我无法安装任何引擎。 从指南安装第一个事件引擎后,我有一个错误,说我没有有效的gem规格。 Using refinerycms-events (1.0) from source at vendor/extensions refinerycms-events at /Users/lydia/Desktop/projects/cmsex/vendor/extensions/events did not have a valid gemspec. This prevents bundler from installing bins or native extensions, but that may not affect its functionality. The validation message from Rubygems was: authors may not be empty 现在,每当我尝试安装另一个引擎时,命令行说安装已成功,但我无法在bundle show上找到该gem。 我无法生成插件和数据库。 我已将这些行添加到我的Gemfile中: gem’refinerycms-blog’,’〜> 2.1.0′ gem’refinerycms-search’,’〜> 2.1.0′ 这是我的gem包含在捆绑中: Gems […]

Railsvalidation虚拟属性

我这个型号: class Bunny < ActiveRecord::Base attr_accessor :number validates_presence_of :number validates_numericality_of :number end 每当我提交表单来创建此模型时,我都会收到以下错误: 未定义的方法`number_before_type_cast’用于#

在state_machine gem上持久validation

在state_machine gem转换之前执行validation的正确语法是什么? 我试过以下, before_transition :apple => :orange do validate :validate_core end def validate_core if core.things.blank? errors.add(:core, ‘must have one thing’) end end 但我得到以下错误, undefined method `validate’ for # 我也试过写它, state :orange do validate :validate_core end 但是这会在保存记录后导致回滚,这不太理想。 我想阻止状态机转换为:orange 。 核心问题是在我的控制器中我有依赖于object.save结果的逻辑。 我对状态机的validation直到初始保存之后才开始,因此保存返回为真,控制器继续逻辑,如果对象无效,则不应该命中。 除了检查保存之外,我还通过手动测试有效性来解决这个问题,但感觉应该有一种方法可以在对象保存之前激活validation。