1

個人モデルのフォームを介して割り当てモデルの属性を保存しようとしています:

class Person < ActiveRecord::Base
  has_one :assignment, dependent: :destroy
  accepts_nested_attributes_for :assignment, allow_destroy: true
end

class Assignment < ActiveRecord::Base
  belongs_to :person
  belongs_to :project
end

class Project < ActiveRecord::Base
  has_many :reverse_assignments, class_name:  'Assignment'
end

class PersonsController < ApplicationController
  def new
    @person = Person.new
  end

  def create
    @person = Person.build(person_params)
    @person.build_assignment(assignment_params) # Shouldn't this be obsolete?
    redirect_to root_url
  end

  private

    def person_params
      params.require(:person).permit(:name, assignment_attributes: [:id, :project_id])
    end

    def assignment_params
      params.require(:assignment).permit(:person_id, :project_id) # Only needed because of the "obsolete" line
    end
end

class AssignmentsController < ApplicationController
end

これはフォームです (slim-html):

= form_for(@person) do |f|
  = f.text_field :name
  = fields_for :assignment do |r|
    = r.collection_select :project_id, Project.order(:name), :id, :name
  = f.submit 'Save'

project-form による割り当ての作成は機能しますが、PersonsController の create アクションに 2 行目を含めることによってのみ機能します。ただし、person_params には割り当て_params が既に含まれているため、最初の行で十分ではないでしょうか? 非常によく似たコードを使用する edit-person-form を介して割り当てを更新する際に問題があるため、質問しています。

4

1 に答える 1