0

레일에서 두 모델의 유효성을 검사하려고합니다.레일의 모델 유효성 검사, 암시 적 연결

해고는 볼링을 "당신이되는 해고 유형이있는 경우"BowlingRecord ", 당신은 있어야합니다"라는 조건이 있습니다. "

class Dismissal < ActiveRecord::Base 

    include DismissalHelper 

    belongs_to :bowling_record 

    validate :dismissal_bowling_record_combo_is_appropriate 

    def dismissal_bowling_record_combo_is_appropriate 
    return if !dismissal_type.present? 
    if bowling_record.present? 
     return if DismissalHelper::BOWLING_DISMISSAL_TYPES.include?(dismissal_type) 
     errors.add(:dismissal_type, "#{dismissal_type} can't have a bowler!") 
    else 
     return if !DismissalHelper::BOWLING_DISMISSAL_TYPES.include?(dismissal_type) 
     errors.add(:dismissal_type, "#{dismissal_type} must have a bowler!") 
    end 
    end 

end 

BowlingRecord 말한다 상태가"당신은 어떤이있는 경우를 .

: 해고는, 그 때 (그 중 하나입니다 볼링) "특정 해고 유형이어야합니다 내가 문제가이 구축하는 데 문제가

class BowlingRecord < ActiveRecord::Base 

    include DismissalHelper 

    has_many :dismissals 

    validate :dismissals_go_against_bowler 

    def dismissals_go_against_bowler 
    dismissals.each do |dismissal| 
     if !DismissalHelper::BOWLING_DISMISSAL_TYPES.include?(dismissal.dismissal_type) 
     errors.add(:dismissal, "can't be #{dismissal.dismissal_type} if registered against a bowler") 
     end 
    end 
    end 

end 

, 현실적으로 내가 좋아하는 뭔가를하고 싶어

하지만 우리가 해고를 할 때 "볼링을해야하는 경우 볼링 기록이 필요합니다"라고 말하기 때문에 이것은 폭발적입니다. 그러나 모든 정보는 여기에 있습니다. 나는 해고가 게으르도록 만들고, 볼링 기록에 속한 컨텍스트를 만들어야합니다.

물론 나는 볼링 기록을 앞면으로 만든 다음 해고를 하나씩 추가한다고 말합니다. 그러나 내가이 방법으로 그것을 할 수있는 방법이 있다면 ... 궁금

감사

된 더러운 코드 것 같다 그래서 당신은 관련 해고 .build

답변

1

:

record = BowlingRecord.new(
    extra_balls: 5, 
    maidens: 3, 
    runs: 56 
) 

record.dismissals.build dismissal_type: :bowled 

record.save! 

.build을 :

속성으로 인스턴스화되어이 객체에 링크되었지만 아직 저장되지 않은 컬렉션 유형의 새 객체를 반환합니다.

자세한 내용은 ActiveRecord::Associations::CollectionProxy을 참조하십시오.

부터 ActiveRecord::AutosaveAssociation까지는 부모 볼링 기록이 저장 될 때 해고가 자동으로 저장됩니다. 이것은 트랜잭션 내에서 발생하기 때문에 둘 중 하나가 저장에 실패하면 일관성없는 상태가되지 않습니다.

+0

안녕하세요, 네, 바로 이것이 내가 찾고있는 것입니다. 어쨌든 곧 트랜잭션 성격에 주위에, 필요 감사합니다 :) – Imran