2013-02-07 3 views
2

has_many에서 연관을 통해 모델의 유효성을 검사하는 데 문제가 있습니다. 아래는 관련 모델은 다음과 같습니다레일 has_many : 유효성 검사를 통해

방송 모델

class Broadcast < ActiveRecord::Base 

    attr_accessible :content, 
        :expires, 
        :user_ids, 
        :user_id 

    has_many :users, through: :broadcast_receipts 
    has_many :broadcast_receipts, dependent: :destroy 

    validates :user_id, presence: true 
    validates :content, presence: true 

end 

방송 영수증 모델

class BroadcastReceipt < ActiveRecord::Base 

    belongs_to :broadcast 
    belongs_to :user 

    attr_accessible :user_id, :cleared, :broadcast_id 

    validates :user_id  , presence: true 
    validates :broadcast_id   , presence: true 
end 

방송 영수증을 통해 방송 영수증을 have_many 사용자와의 연관도 있습니다.

문제는 다음 줄에 나타납니다 : 나는 방송을 만들려고 할 때마다

validates :broadcast_id   , presence: true 

, 나는 주어진 오류 메시지와 함께 롤백을 얻는다. 그러나 위의 행을 제거하면 모든 것이 예상대로 작동합니다.

브로드 캐스트 수신이 생성되기 전에 브로드 캐스트가 저장되지 않는 문제입니다.
영수증 모델에 broadcast_id가 설정되어 있는지 확인할 수있는 방법이 있습니까?

+0

'validate : broadcast_id_exists'와 같은 사용자 정의 유효성 검사기를 만들고 DB에 브로드 캐스트가 있는지 확인하십시오. – Kaeros

답변

1

코드 구조에 문제가있을 수 있습니다. 이 버전을 사용해 볼 수 있습니다.

이 같은 문제는 여기서 설명하는 것으로 보인다
class Broadcast < ActiveRecord::Base 
    # I assume these are the recipients 
    has_many :broadcast_receipts, dependent: :destroy 
    has_many :users, through: :broadcast_receipts 

    # I assume this is the creator 
    validates :user_id, :content, presence: true 
    attr_accessible :content, :expires, :user_id, :user_ids 
end 

class BroadcastReceipt < ActiveRecord::Base 
    belongs_to :broadcast 
    belongs_to :user 

    # You should be able to validate the presence 
    # of an associated model directly 
    validates :user, :broadcast, presence: true 

    attr_accessible :cleared 
end 
+0

이것이 작동해야하는 이유는 알지만 그래도 오류가 없으면 롤백됩니다. 흥미로운 점은 Rails 3.2.11로 업그레이드하기 전에 작동 했었지만 변경 로그에서 작동을 멈추게 할만한 것을 찾을 수 없다는 것입니다. 브로드 캐스트가 실제로 저장되기 전에 영수증을 저장하려고 시도하기 때문에 전달할 broadcast_id가 없습니다. – Ammar

관련 문제