각기 다른 유효성 검사를 가진 총 7 개의 모델을 포함하는 중첩 된 양식으로 작업하고 있습니다. 양식을 간단히 편집 할 때 유효성 검사가 실행되고 올바르게 표시되며 데이터가 제대로 저장됩니다. 그러나 양식 제출자에 따라 다른 유효성 검사가 필요합니다 (예 : 관리자가 다른 필수 필드를 건너 뛸 수 있음).깊게 중첩 된 양식의 현재 사용자에 따라 실행되는 레일스 변경
내 모델에서 attr_accessible : editing_user를 사용하여 특정 유효성 검사를 건너 뛸 수 있다고 생각한 다음 컨트롤러에서 설정합니다.
class ModelExample < ActiveRecord::Base
attr_accessible :editing_user
validates_presence_of :email, :unless => "editing_user == 'admin'"
end
class ModelExamplesController < ActionController::Base
def create
@model_example = ModelExample.new(params[:model_example])
@model_example.editing_user = 'admin'
@model_example.save
end
end
중첩 모델 내에서이 기본 구조를 사용하여 제대로 저장할 수 있는지 확인했습니다. 이것은 이상한 행동이 시작되는 곳입니다. ActiveRecord가 중첩 모델을 여러 번 저장하려고 할 때마다 매번 유효성 검사를 실행하는 것처럼 보이는 이유가 있습니다. 이상하게 만드는 것은 @ model_example.save를 호출하는 것입니다. @ model_example.save는 실패 할 경우 false를 반환해야합니다. 그러나 첫 번째 유효성 검사가 완료되면 (editing_user가 설정되었으므로) 나중에 유효성 검사가 실패하고 예외가 발생하므로 정상 .save 메서드는 반환되는 대신 예외를 발생시킵니다.
ActiveRecord가 모든 추가 유효성 검사 및 저장을 수행하는 것을 피하는 방법을 알고 있습니까? 아니면 중복 된 작업 전체에서 editing_user를 유지하는 방법을 알고 계십니까?
에 당신은 또한'cattr_accessor를 사용할 수 있습니다. – Mika