레일스에서 매우 이상한 문제가 있습니다. 모든 자식 개체를 업데이트하려면 부모 개체에 update_attributes
을 사용하고 있습니다. children 객체는 (사용자 정의) 유효성 검사를 수행하며 실제로이 기능은 정상적으로 작동합니다. 즉, 유효성 검사 트리거를 잘못 입력하면 오류가 발생합니다.레일스 update_attributes가 저장 전에 유효성 검사를 호출하는 이유
이제는 모델 중 하나가 데이터베이스에서 유효하지 않은 이상한 상황에 처해 있습니다. 왜 그런지 묻지 마십시오. 데이터베이스에 들어가 SQL을 실행하여 모델을 유효하지 않게 할 수 있습니다. 내 앱에 들어가면 유효하지 않은 값을 볼 수 있으며 괜찮습니다. 값을 수정하고 다시 저장하면 루비 코드에서 스테레오가 새 값을 저장하기 전에 호출된다는 것을 알 수 있습니다. 즉, 오류가 발생하고 레일스가 SQL을 실행하여 실제로 값을 업데이트하지 않습니다. 올바른 것.
나는 위의 의미가되기를 바랍니다. 어떤 생각이 드나요, 아니면 제가 간과하고있는 것이 있다고 생각합니까?
는 해결책 : 무슨 일이 일어 났는지
했다가 다 대다 관계가 새로운 데이터로 대체되기 전에 기존 DB 데이터의 유효성을 검사했다. 기본적 구조는 다음과 같았다 : 나는 독립적 어쨌든 링크 된 기록을 검증하고 이후
class User
has_many :user_permissions
has_many :permissions, :through => :model_permissions
class Permission
has_many :user_permissions
has_many :users, :through => :user_permissions
class UserPermission
belongs_to :user
belongs_to :permission
validates_associated :user # THIS was causing the problem
validates_associated :permission # and THIS as well
내가 단순히 validates_associated
지시어를 제거했습니다.
'그것은 오류가 포함 된 관련 모델 수도 있습니다 .' ... 그것은 올바른 방향으로 나를 가리켰다. 다 대다 링크 테이블은 관련된 모델을 검증하고 있었는데, 여기서 새 데이터를 저장 (및 유효성을 검사)하기 전에 이전 데이터로 유효성을 검사합니다. 내 질문이 업데이트되었습니다. 감사! – Tallmaris