Tag: validation

嵌套模型validation – 不显示错误

关于这一点有很多问题,但它们似乎都没有帮助。 是的,我看过这个导演 。 我有一个有很多书的作者,如下: 作者: class Author < ActiveRecord::Base attr_accessible :name has_many :books, dependent: :destroy accepts_nested_attributes_for :books, allow_destroy: true validates :name, presence: true validates :name, length: { minimum: 3 } end 书: class Book < ActiveRecord::Base attr_accessible :name, :year belongs_to :author validates :name, :year, presence: true validates :year, numericality: { only_integer: true, less_than_or_equal_to: Time.now.year } […]

errors.full_messages:属性名称出现两次

这一直困扰着我。 我的所有模型都会出现此问题,但我会使用其中一个,测验,作为示例。 测验具有以下validation: validates_presence_of :size, :style 我正在使用I18n,并且我的翻译文件中有以下设置:(这些只是标准的错误消息,但我已将它们包含在我的en.yml中,以便很容易看到结构,如果我想要为任何特定型号覆盖它们) activerecord: errors: messages: inclusion: “{{attribute}} is not included in the list” invalid: “{{attribute}} is invalid” empty: “{{attribute}} can’t be empty” blank: “{{attribute}} can’t be blank” record_invalid: “Validation failed: {{errors}}” 问题是这样的:如果我做了一个新的测验,这将失败validation,然后查看quiz.errors.full_messages,每个错误消息都有属性然后是完整的消息: >> quiz = Quiz.create => >> quiz.errors.full_messages => [“Size Size can’t be blank”, “Style Style can’t be blank”] […]

手动定义getter / setter时如何使用read_attribute(attr_accessor或attr_writers)

我设置了一个search模型,并且要求至少填写一个字段。 我发现了一个有助于validation的问题, Rails:如何要求至少一个字段不为空 。 (我尝试了所有答案,但Voyta似乎是最好的。) validation工作正常,除非我想通过attr_accessor或attr_writer重新定义getter / setter。 (我在表单上有虚拟属性,需要分开validation。)为了弄清问题是什么,我测试了一个常规属性item_length属性。 如果我添加attr_accessor :item_length ,validation将停止工作。 所以,我想问题是如何在不使用点表示法的情况下读取属性的值。 由于validation使用字符串,我无法使用正常的阅读方式。 这是一个片段: if %w(keywords item_length item_length_feet item_length_inches).all?{|attr| read_attribute(attr).blank?} errors.add(:base, “Please fill out at least one field”) end 就像我说的那样,虚拟的attrbutes(length_inches和length_feet)完全不起作用,普通的属性(length)也可以工作,除非我重新定义了getter / setter。

控制器如何手动设置某个字段的validation错误

我有一个包含3个ActiveRecord字段的表单。 其中一个领域有一些愚蠢的,以及STATE-DEPENDENTvalidation要求。 (例如,如果在安装向导表单上创建对象,我只validation该字段。) 在我的POST处理程序中创建对象,我想我可以调用errors.add来插入一个特殊的错误条件 @foo = Foo.new(params[:foo]) if goofy_conditions(params[:foo][:goofy_field]) @foo.errors.add(:goofy_field, “doesn’t meet the goofy conditions” ) end respond_to do |format| if @foo.save … else … redirect back to form (with error fields hilited) 但是,在控制器中执行@ foo.errors.add()似乎没有做任何事情……如果其他字段通过validation,它不会阻止save()。 另一种方法是将自定义validation处理程序放入模型中……我知道使用errors.add(:field,’msg’)可以正常工作……但在这种情况下,我的控制器如何将’传递’信息传递给validation器告诉它该字段是否需要validation。

Rails 3在所有表单上删除before_validation的空格

我对Rails相对较新,有点惊讶这不是一个可配置的行为……至少没有一个我能找到的?!? 我原以为99%的表单会受益于从所有string和text字段中修剪的空白?!? 猜猜我错了…… 无论如何,我正在寻找一种干燥的方法来从Rails 3应用程序中的表单字段(类型:string&:text)中删除所有空格。 视图有自动引用(包含?)并可用于每个视图的助手……但模型似乎没有这样的东西?!? 或者他们呢? 所以目前我做的是首先 要求的 , 然后 包括 whitespace_helper(又名WhitespaceHelper)。 但这对我来说似乎仍然不是很干,但它有效…… ClassName.rb: require ‘whitespace_helper’ class ClassName < ActiveRecord::Base include WhitespaceHelper before_validation :strip_blanks … protected def strip_blanks self.attributeA.strip! self.attributeB.strip! … end LIB / whitespace_helper.rb: module WhitespaceHelper def strip_whitespace self.attributes.each_pair do |key, value| self[key] = value.strip if value.respond_to?(‘strip’) end end 我想我正在寻找一个单一的(DRY)方法(类?)来放置一个( lib/ ?),它将获取一个params(或属性)列表并从每个属性w中删除空格( .strip! […]

carrierwave extension_white_list无效

这是类似的情况,但没有解决方案CarrierWave extension_white_list似乎不起作用 Carrierwave提供了一个函数extension_white_list ,它应该阻止用户上传无效文件。 我已取消注释此function但如何处理此案例? 我想捕获此错误并通知用户他应该更改文件。 这个wiki条目似乎相关,但我不知道如何继续https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Validate-uploads-with-Active-Record

Rails:保存后validation关联?

我有一个User模型,它有很多roles 。 角色包含user_id字段,我想validate_presence_of 问题是:如果我在创建时为用户分配了一个角色,则validation失败,因为没有设置user_id。 现在,我确实想validationuser_id是否存在,但我需要在检查之前保存用户。 代码目前看起来像这样: @user = User.new(params[:user]) @user.roles < ‘Peon’) unless @user.has_roles? if @user.save # … 我能想到解决问题的唯一方法是禁用validation,我不想做,或者双重保存到DB,这不是完全有效的。 处理此问题的标准方法是什么?

Rails:对集合而不是数据库表使用现有的模型validation规则

Rails 4,Mongoid而不是ActiveRecord(但是为了这个问题,这应该改变任何东西)。 假设我有一个带有一些validation规则的MyModel域类: class MyModel include Mongoid::Document field :text, type: String field :type, type: String belongs_to :parent validates :text, presence: true validates :type, inclusion: %w(ABC) validates_uniqueness_of :text, scope: :parent # important validation rule for the purpose of the question end 其中Parent是另一个域类: class Parent include Mongoid::Document field :name, type: String has_many my_models end 此外,我在数据库中的相关表填充了一些有效数据。 现在,我想从CSV文件导入一些数据,这可能与数据库中的现有数据冲突。 最简单的方法是为CSV中的每一行创建一个MyModel实例,并validation它是否有效,然后将其保存到数据库中(或丢弃它)。 […]

Rails 3.1:通过关系在has_many的连接表上自定义validation消息?

我有一个Meal模型has_many :foods, :through => :servings 。 Meal还: accepts_nested_attributes_for :servings, :allow_destroy => true validates_associated :servings Serving模型有一个名为serving_amount的字段和一个名为amount_recorded的字段。 在Serving模型中,我目前使用此validation: validates :serving_size, :numericality => {:greater_than => 0}, :if => :amount_recorded? validation失败时返回的消息很糟糕。 事实上,每餐可能有多份食物。 如何创建引用服务大小无效的食物名称的自定义validation消息? 例如,我想说,“你为西瓜输入了一个无效的服务大小”,如果amount_recorded为一个name西瓜的Food的服务是真的,validation失败。

在Rails中检查和validation非模型参数的位置

你在哪里检查Ruby On Rails中不是模型属性的URL参数(如page,per_page,sort_mode)? 在控制器或模型中? 例如,在进行更复杂的数据库查询时,您是否会检查参数并可能在控制器中设置默认值,然后执行MyModel.search(page, per_page, order, sort_mode, query) ,或者您是否在内部设置validation模型,只是传递非操纵的参数MyModel.search(params) ? 那么如何将该参数报告回视图? 例如,sort_mode参数应该在视图上为排序方向生成一个小箭头。 你检查并清理params散列并从params获取视图中的数据,或者你是否使用自己的实例变量?