• 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
  • 相关阅读:
    学习Easyui
    JS链表
    Javascript数组
    布局管理器(转)
    JCombobox组合框效果实现(转)
    JComboBox
    java.lang.ClassFormatError
    JSplitPane demo
    USB OTG简单介绍
    Cookie/Session机制具体解释
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/5848806.html
Copyright © 2020-2023  润新知