나는 Company
, User
및 Department
모델을 가지고 있습니다. 여러 개의 다른 회사가 있으며 각각은 has_many
부서입니다.레일 유효성 검사 has_many 속성
User
은 Departments
에서 UserDepartments
의 조인 테이블에 속할 수 있습니다. User
에 대한
가, 내가 사용
<%= f.collection_check_boxes :department_ids, @user.company.departments.all, :id, :name %>
악의적 인 사용자가 사용자의 회사에 속하지 않는 department_id를 게시 할 말림 등을 사용하지 않은 것을 검증하기위한 가장 좋은 방법은 무엇입니까?
현재 조인 테이블 자체에서 다음을 사용하고 있습니다. 더 좋은 방법이 있는지 궁금합니다. 사용자가 악의적 ID를 제출 않는 경우 별도 참고로
class UserDepartment < ActiveRecord::Base
belongs_to :user
belongs_to :department
validate :check_company_matches
private
def check_company_matches
unless user.company_id == department.company_id
errors.add(:user, "This department does not match the user's company.")
end
end
end
, 레일은 오류 개체 예외 페이지보다 일반적인 형태 렌더링 페이지를 나타낸다 그게 왜?
부적당하다는 또 다른 사소한 점은 5 개의 다른 부서가있는 사용자 양식을 제출할 때이 유효성 검사가 5 개의 SQL 쿼리를 생성한다는 것입니다. 아마도 User 모델 자체가 유효성 검사를 수행하면 하나의 쿼리로이 작업을 수행 할 수 있습니다. 당연히 데이터 무결성이 가장 중요합니다.
감사합니다.
조인 테이블 모델에 유효성 검사를 추가하는 것은 좋지 않습니다. 부서 모델 및 사용자 모델의 코드를 게시 할 수 있습니까? – kasperite
@kasperite 이것은 단지 예입니다. 부서는 단순히'belongs_to : company'이고 사용자는'belongs_to : company' 및'has_many : user_departments','has_many : departments, through : : user_departments'입니다. –