0

콘솔 아래 모델을 사용하여 &, 나는 성적 K, 1 및 편집 양식이 선택 필드가 학교 2 연결 그 협회가 필드의 3 가지 항목을 올바르게 선택했음을 볼 수 있지만, 성적을 선택/선택 취소하려면 클릭하면 변경 사항이 저장되지 않습니다. 여기 매칭 최대 collection_select 출력 레일에서

는 모델입니다 :

# app/models/school.rb 
class School < ActiveRecord::Base 
    has_many :grades_schools, inverse_of: :school 
    has_many :grades, through: :grades_schools 
    accepts_nested_attributes_for :grades_schools, allow_destroy: true 
end 

# app/models/grades_school.rb 
class GradesSchool < ActiveRecord::Base 
    belongs_to :school 
    belongs_to :grade 
end 

# app/models/grade.rb 
class Grade < ActiveRecord::Base 
    has_many :grades_schools, inverse_of: :grade 
    has_many :schools, through: :grades_schools 
end 

양식은 다음과 같습니다

# app/views/schools/_form.html.haml 
= form_for(@school) do |f| 
/<snip> other fields 
    = collection_select(:school, :grade_ids, @all_grades, :id, :name, {:selected => @school.grade_ids, include_hidden: false}, {:multiple => true}) 
/<snip> other fields + submit button 

을 그리고 컨트롤러는 다음과 같다

# app/controllers/schools_controller.rb 
class SchoolsController < ApplicationController 
    before_action :set_school, only: [:show, :edit, :update] 

    def index 
    @schools = School.all 
    end 

    def show 
    end 

    def new 
    @school = School.new 
    @all_grades = Grade.all 
    @grades_schools = @school.grades_schools.build 
    end 

    def edit 
    @all_grades = Grade.all 
    @grades_schools = @school.grades_schools.build 
    end 

    def create 
    @school = School.new(school_params) 

    respond_to do |format| 
     if @school.save 
     format.html { redirect_to @school, notice: 'School was successfully created.' } 
     format.json { render :show, status: :created, location: @school } 
     else 
     format.html { render :new } 
     format.json { render json: @school.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def update 
    respond_to do |format| 
     if @school.update(school_params) 
     format.html { redirect_to @school, notice: 'School was successfully updated.' } 
     format.json { render :show, status: :ok, location: @school } 
     else 
     format.html { render :edit } 
     format.json { render json: @school.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    private 
    def set_school 
     @school = School.find(params[:id]) 
    end 

    def school_params 
     params.require(:school).permit(:name, :date, :school_id, grades_attributes: [:id]) 
    end 
end 

나는 느낌 요점은 그이 내 문제는 collection_select에 의해 생성 된 매개 변수와 강력한 매개 변수 사이의 불일치와 관련이 있습니다. 매개 변수. 이것들 중 하나 또는 둘 모두는 아마도 부정확하지만, 저의 삶은 제가 잘못하고있는 것을 보여주는 온라인 예제 코드를 찾을 수 없습니다.

변형 된 유사 콘텐츠로드를 시도한 후, 나는 현명함 끝에 있습니다! 도와 주셔서 미리 감사드립니다.

답변

0

딱지. 나는 이것을 전에 시도했지만, collection_select 대신에 형태로 fields_for을 사용 했음에 틀림 없다고 맹세 할 수 있었다. 해결책 :

def school_params 
    params.require(:school).permit(:name, :date, :school_id, grades_attributes: [:id]) 
end 

나는 여전히 fields_for @grades_schools를 사용하는 경우는 어떻게 작동하는지 궁금하지만, 다른 일에 대한 그 조사를 저장해야합니다

def school_params 
    params.require(:school).permit(:name, :date, :school_id, grade_ids: []) 
end 

됩니다 ....