2010-05-18 8 views
0

두 모델 UsersRoles이 있습니다. 두 모델 사이에 많은 관계가 설정되어 있고 roles_users이라는 조인트 테이블이 있습니다.Ruby on Rails에서 조인 테이블 레코드를 업데이트합니다.

사용자가 확인란을 선택하고 컨트롤러에 게시 한 후 역할 목록이있는 페이지에 양식이있어서 roles_users 테이블이 업데이트됩니다. 그래서

role_ids = params[:role_ids] 
user.roles.clear 
role_ids.each do |role| 
    user.roles << Role.find(role) 
end unless role_ids.nil? 

나는로부터 전송 된 모든 역할 ID를 던졌다 반복 한 후 밖으로 모든 항목을 삭제하고 : 나는 더 좋은 방법이 확실하지이기 때문에 내 업데이트 방법에 순간

나는이 일을하고있다 양식을 통해 양식, 나는 또한 모든 확인란을 선택하고 양식을 게시하는 중복 기록을 유지하는 사람이 좀 더 효율적인 방법에 대한 조언을 줄 수있는 것으로 나타났습니다?

user.roles = params[:role_ids].present? ? Role.find_all_by_id(params[:role_ids]) : [ ] 

액티브 새로운 연결을 만들거나 더 이상 나와있는 사람들을 제거주의해야합니다 : 그것은 당신을 위해 더러운 일을 처리로

답변

2

당신은, 직접 할당 할 수 있습니다. 유효성 검사 실패와 같이 조인 모델이 저장되지 못하게되면 문제가 발생할 수 있지만 대부분의 경우 예상대로 작동합니다.

당신은 has_many ..., :를 사용하고 있기를 바랍니다. 예전의 예제 코드 때문에 많은 Rails 응용 프로그램을 계속 사용하지 않는 has_and_belongs_to_many가 아닙니다.

+0

그것에 대한 건배는 완벽하게 작동합니다. 저는 많은 사람들에게 has_and_belongs를 사용하고 있지만 : about 접근법을 읽고 그것에 옮겼습니다. 다시 한번 감사드립니다. – RailsSon

+0

user.roles = params [: roles_ids] .present가되어야합니까? ? Role.find_all_by_id (params [: roles_ids]) : [] – user938363

+0

네 말이 맞아. 수정되었습니다. – tadman

관련 문제