2013-05-02 7 views
5

여러 고용주에게 과제를 할당해야하는 애플리케이션을 구축 중입니다.레일 4 : has_many가있는 체크 박스

나는 이러한 모델을 구축해야 :

#assignment.rb 
class Assignment < ActiveRecord::Base 
    has_many :employer_assignments 
    has_many :employers, :through => :employer_assignments 
end 

#employer.rb 
class Employer < ActiveRecord::Base 
    has_many :employer_assignments 
    has_many :assignments, :through => :employer_assignments 
end 

#employer_assignment.rb 
class EmployerAssignment < ActiveRecord::Base 
    belongs_to :employer 
    belongs_to :assignment 
end 

을 그리고 지금은 양식이 employer_assignment 테이블에 저장하지만 난 내 양식에 사용되는 다음 코드는 작동하지 않습니다합니다. 나는 할당을 만들하지 않습니다하지만 employer_assignment 테이블의 레코드를 생성하지 않는 양식을 보내려고있는 내 할당 컨트롤러에 employer_ids을 :

<div class="field"> 
    <%= f.label :employer_ids %><br /> 
    <%= collection_check_boxes(:assignment, :employer_ids, Employer.all, :id, :name) %> 
</div> 

나는 추가했다. 콘솔 (Assignment.last.employers < < Employer.all )을 통해 추가하면 모두 정상적으로 작동합니다. 나는 뭔가를 놓치고 있지만 무엇을 알아 내지 못한다고 확신한다.

미리 감사드립니다.

+0

해결 방법을 찾으셨습니까? 비슷한 문제가 있습니다. DB에 저장하지 않음 – Benjamin

+1

IIRC 레일 4는 기본적으로 강력한 매개 변수를 사용합니다.이 매개 변수는 배열 유형을 지원하지 않습니다. 그래서'employer_ids'가 배열을 허용하도록 명시 적으로 정의해야합니다. –

답변

9

rails4의 강력한 매개 변수 (@ emil-kampp가 언급 했음)로 인해 로그에 Unpermitted parameters:이 표시 될 수 있습니다. 새로운 레일이 생성 된 후 컨트롤러에 생성됩니다.

class EmployersController < ApplicationController 
    # <snip> 
    def update 
    @employer.update(employer_params) 
    end 

    def employer_params 
    params.require(:employer).permit(:name, { :employer_ids => [] }) 
    end 
end 

는 또한이 응답 SO에이 Question 참조 : 그래서 당신의 코드를 사용하여 그것과 같을 것입니다. 희망적으로 이것은 누군가에게 몇 사이클을 절약합니다.