• ruby on rails validates uniqueness


    最近在处理一个小功能,每个元素可以有多个图片,每个图片的name表示了它是背景图还是海报图,

    需要对每个元素的图片name做一个唯一性验证,一个元素不能添加两个海报图,

    需要使用的是validates_uniqueness_of

    http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-validates_uniqueness_of

    Validates whether the value of the specified attributes are unique across the system. Useful for making sure that only one user can be named “davidhh”.

    class Person < ActiveRecord::Base
      validates_uniqueness_of :user_name
    end
    

    It can also validate whether the value of the specified attributes are unique based on a :scope parameter:

    class Person < ActiveRecord::Base
      validates_uniqueness_of :user_name, scope: :account_id
    end
    

    Or even multiple scope parameters. For example, making sure that a teacher can only be on the schedule once per semester for a particular class.

    class TeacherSchedule < ActiveRecord::Base
      validates_uniqueness_of :teacher_id, scope: [:semester_id, :class_id]
    end
    

    It is also possible to limit the uniqueness constraint to a set of records matching certain conditions. In this example archived articles are not being taken into consideration when validating uniqueness of the title attribute:

    class Article < ActiveRecord::Base
      validates_uniqueness_of :title, conditions: -> { where.not(status: 'archived') }
    end
    

    When the record is created, a check is performed to make sure that no record exists in the database with the given value for the specified attribute (that maps to a column). When the record is updated, the same check is made but disregarding the record itself.

    Configuration options:

    • :message - Specifies a custom error message (default is: “has already been taken”).

    • :scope - One or more columns by which to limit the scope of the uniqueness constraint.

    • :conditions - Specify the conditions to be included as a WHERE SQL fragment to limit the uniqueness constraint lookup (e.g. conditions: -> { where(status: 'active') }).

    • :case_sensitive - Looks for an exact match. Ignored by non-text columns (true by default).

    • :allow_nil - If set to true, skips this validation if the attribute is nil (default is false).

    • :allow_blank - If set to true, skips this validation if the attribute is blank (default is false).

    • :if - Specifies a method, proc or string to call to determine if the validation should occur (e.g. if: :allow_validation, or if: Proc.new { |user| user.signup_step > 2 }). The method, proc or string should return or evaluate to a true or false value.

    • :unless - Specifies a method, proc or string to call to determine if the validation should not occur (e.g. unless: :skip_validation, or unless: Proc.new { |user| user.signup_step <= 2 }). The method, proc or string should return or evaluate to a true or false value.

    class Picture < ApplicationRecord
      belongs_to :imageable, polymorphic: true
    
      validates_uniqueness_of :name, scope: [:imageable_id, :imageable_type]
    end
  • 相关阅读:
    bootstrap
    jQuery-介绍 加载 选择器 样式操作 属性操作 绑定click事件
    javascript -- BOM,DOM
    前端 -- javas-基本语法/引用等
    fatal: remote origin already exists.报错
    git
    npm install 时总是报phantomjs-prebuilt@2.1.14安装失败
    JavaScript中设置元素class,添加/删除元素class的方法
    单选按钮点击相关文字选中
    JS/Jquery实现select选中option触发事件
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/5848806.html
Copyright © 2020-2023  润新知