[RUBY-ON-RAILS] 유효성 검사 고유성만을 조건의 경우 레일
RUBY-ON-RAILS유효성 검사 고유성만을 조건의 경우 레일
나는 질문 클래스가 있습니다 :
class Question < ActiveRecord::Base
attr_accessible :user_id, :created_on
validates_uniqueness_of :created_on, :scope => :user_id
end
나는 고유 인덱스 및 validates_uniqueness_of를 통해 질문 클래스를 통해 데이터베이스에 고유성을 강제 할 수 있도록 주어진 사용자는 하루에 하나의 질문을 만들 수 있습니다.
내가 실행 해요 문제는 난 단지 관리자가 아닌 사용자에게 그 제약 조건을 원하는 것입니다. 그들이 원하는 그래서 관리자는 하루에 많은 질문으로 만들 수 있습니다. 우아하게 그것을 달성하는 방법에 대한 어떤 아이디어?
해결법
-
==============================
1.당신이 중 루비의 간단한 문자열을 전달하여 검증 조건 수는 하나에 값 등의 상징으로, 발동, 또는 메소드 이름을 실행합니다 : 경우 나 : 유효성 검사에 대한 옵션에서 제외하고. 여기 몇 가지 예가 있어요.
당신이 중 루비의 간단한 문자열을 전달하여 검증 조건 수는 하나에 값 등의 상징으로, 발동, 또는 메소드 이름을 실행합니다 : 경우 나 : 유효성 검사에 대한 옵션에서 제외하고. 여기 몇 가지 예가 있어요.
레일 버전 5.2 이전에 당신은 문자열을 전달할 수 :
# using a string: validates :name, uniqueness: true, if: 'name.present?'
이후 5.2에서 문자열은 더 이상 당신에게 다음과 같은 옵션을 떠나, 지원되지 않습니다 :
# using a Proc: validates :email, presence: true, if: Proc.new { |user| user.approved? } # using a Lambda (a type of proc ... and a good replacement for deprecated strings): validates :email, presence: true, if: -> { name.present? } # using a symbol to call a method: validates :address, presence: true, if: :some_complex_condition def some_complex_condition true # do your checking and return true or false end
귀하의 경우에는, 당신이 뭔가를 할 수 있습니다 :
class Question < ActiveRecord::Base attr_accessible :user_id, :created_on validates_uniqueness_of :created_on, :scope => :user_id, unless: Proc.new { |question| question.user.is_admin? } end
자세한 내용은 레일 가이드에 조건부 검증 섹션에서보세요 : http://edgeguides.rubyonrails.org/active_record_validations.html#conditional-validation
-
==============================
2.내가 보장에 고유성을 알고있는 유일한 방법은 데이터베이스 (예를 들어, 고유 인덱스)하는 것입니다. 모든 레일 전용 기반의 접근 방식은 경쟁 조건을 포함한다. 제약 조건을 감안할 때, 나는 가장 쉬운 것은 당신이 관리자에 null을 떠날 것 날짜와 사용자 ID의 조합을 포함하는 별도의 고유 인덱스 컬럼을 설정하는 것입니다 생각합니다.
내가 보장에 고유성을 알고있는 유일한 방법은 데이터베이스 (예를 들어, 고유 인덱스)하는 것입니다. 모든 레일 전용 기반의 접근 방식은 경쟁 조건을 포함한다. 제약 조건을 감안할 때, 나는 가장 쉬운 것은 당신이 관리자에 null을 떠날 것 날짜와 사용자 ID의 조합을 포함하는 별도의 고유 인덱스 컬럼을 설정하는 것입니다 생각합니다.
http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of에서 논의 validates_uniqueness_of에 관해서는, 당신은, 경우 또는 옵션 않는 한의 사용을 통해 비 관리자에 대한 유효성 검사를 제한 할 수 있습니다
-
==============================
3.그냥 validates_uniqueness_of 호출에 조건을 추가 할 수 있습니다.
그냥 validates_uniqueness_of 호출에 조건을 추가 할 수 있습니다.
validates_uniqueness_of :created_on, scope: :user_id, unless: :has_posted? def has_posted exists.where(user_id: user_id).where("created_at >= ?", Time.zone.now.beginning_of_day) end
그러나 더 나은 단지 지정 유효성 검사를 만듭니다
validate :has_not_posted def has_not_posted posted = exists.where(user: user).where("DATE(created_at) = DATE(?)", Time.now) errors.add(:base, "Error message") if posted end
from https://stackoverflow.com/questions/20914899/rails-validate-uniqueness-only-if-conditional by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일 - 렌더링 : 대상 앵커 태그에 행동을? (0) | 2020.03.03 |
---|---|
[RUBY-ON-RAILS] 문자열이 유효한 부동 소수점 값이 있는지 확인 (0) | 2020.03.03 |
[RUBY-ON-RAILS] OS-X는 레일 : "빌드 보석 네이티브 확장에 실패" (0) | 2020.03.03 |
[RUBY-ON-RAILS] 레일 : 어떻게 특정 시간대에 날짜 - 시간 문자열을 구문 분석 (0) | 2020.03.03 |
[RUBY-ON-RAILS] 어떻게 루비와 PDF 기존에 편집 또는 쓰기에? (0) | 2020.03.03 |