0

form_for と fields_for を使用して、会社、住所、および company_person を作成しています。

Company モデルの関連部分は次のとおりです。

class Company < ActiveRecord::Base
has_many :company_people
  accepts_nested_attributes_for :company_people
has_many :addresses, as: :location
  accepts_nested_attributes_for :addresses

関連するパラメーターを Companies コントローラーに追加しました。

def company_params
  params.require(:company).permit(:name, :email, :phone,
  :website, :ein, :description,
  {company_person_params: [:first_name, :last_name, :phone, :email]},
  addresses_attributes: [:id, :street, :city, :zipcode])
end

そして、これが仕事をする会社コントローラの部分です:

@company = Company.new
@company.assign_attributes(company_params)
@company.agencies << Agency.first
@company.company_people.build
@company.company_people << @company_person
if @company.save
  flash.notice = "Success!"   

これはアドレスに対して正常に機能しています - 「@company.assign_attributes(company_params)」によって処理されます。保存され、確認ページに問題なく印刷できます。しかし、company_person は発生していません。すべてに対して nil 例外が発生します。私はこのガイドに従っていました: http://guides.rubyonrails.org/form_helpers.html#nested-formsしかし、私はまだ立ち往生しています。

私は何を間違っていますか?

4

1 に答える 1

0

オブジェクトに属性companyの値がないようです。company_personおそらく、これはモデルの設定方法が原因です。あなたCompanyCompanyPersonモデルは一対多の関係を定義する必要があります:

class Company < ActiveRecord::Base
  has_many :company_people
  #whatever else
end

class CompanyPerson < ActiveRecord::Base
  belongs_to :company
  #whatever else
end

これは、主キーがデフォルトであることを前提としていますid。そうでない場合は、Rails にそれが何であるかを伝える必要があります。

ActiveRecord アソシエーションの詳細については、http: //guides.rubyonrails.org/association_basics.htmlを参照してください。

于 2015-12-22T20:49:33.563 に答える