Rails-연결 여부 확인?


107

다른 모델 B에 대한 "has_many"연결이있는 모델 A가 있습니다. A에 삽입하려면 B에 대한 관련 레코드가 하나 이상 필요하다는 비즈니스 요구 사항이 있습니다. 이것이 사실인지 확인하기 위해 호출 할 수있는 메서드가 있습니까? 또는 사용자 지정 유효성 검사를 작성해야합니까?

답변:


167

http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_presence_of 를 사용할 수 있습니다.validates_presence_of

class A < ActiveRecord::Base
  has_many :bs
  validates_presence_of :bs
end

또는 validates http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates

class A < ActiveRecord::Base
  has_many :bs
  validates :bs, :presence => true
end

당신이 사용하는 경우 그것은 버그가 accepts_nested_attributes_for:allow_destroy => true: 중첩 된 모델과 부모의 확인 . 이 항목에서 솔루션을 찾을 수 있습니다.


18

-------- 레일 4 ------------

validates presence나를 위해 일한 단순

class Profile < ActiveRecord::Base
  belongs_to :user

  validates :user, presence: true
end

class User < ActiveRecord::Base
  has_one :profile
end

이렇게 Profile.create하면 이제 실패합니다. 을 user.create_profile저장하기 전에 사용자 를 사용 하거나 연결해야합니다 profile.


6

다음과 validates_existence_of(플러그인) 연결을 확인할 수 있습니다 .

이 블로그 항목의 예제 스 니펫 :

class Tagging < ActiveRecord::Base
  belongs_to :tag
  belongs_to :taggable, :polymorphic => true
  validates_existence_of :tag, :taggable

  belongs_to :user
  validates_existence_of :user, :allow_nil => true
end

또는 validates_associated. Faisal 은 답변 아래 의 주석에서 언급 했듯이 validates_associated연결된 클래스 유효성 검사를 실행하여 연결된 개체가 유효한지 확인합니다. 존재 여부를 확인 하지 않습니다 . nil 연관이 유효한 것으로 간주된다는 점에 유의하는 것도 중요합니다.


4

연결이 존재하고 유효한지 확인하려면 다음을 사용해야합니다.

class Transaction < ActiveRecord::Base
  belongs_to :bank

  validates_associated :bank
  validates :bank, presence: true
end

개별적 으로 호출하는 대신 validateslike에 추가 옵션을 전달할 수 있다면 좋지 않을까요? valid: truevalidates_associated
Joshua Pinter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.