35

Rails 4 の強力なパラメーターを使用して has_many :through 関連付けを取得するのに問題があります。というモデルがあり、新しいチェックアウト フォームでモデルCheckoutから人を選択する必要があります。チェックアウトと従業員は、モデルEmployeeを通じて関連付けられています。Employment

新しいチェックアウトを作成しようとすると、次のエラーが発生します。

NoMethodError in CheckoutsController#create
undefined method `employee' for #<Checkout:0x007ff4f8d07f88>

作成アクション、チェックアウト パラメータ、または新しいチェックアウト フォームのいずれかに問題があるようです。作成アクションは次のとおりです。

  def create    
    @user = current_user
    @checkout = @user.checkouts.build(checkout_params)

    respond_to do |format|
      if @checkout.save
        format.html { redirect_to @checkout, notice: 'Checkout was successfully created.' }
      else
        format.html { render action: 'new' }
      end
    end
  end

私のチェックアウトパラメータ:

def checkout_params
      params.require(:checkout).permit(:job, :employee_ids, :shift, :date, :hours, :sales, :tips, :owed, :collected, :notes)
end

私の新しいチェックアウトフォーム:

<div class="field">
     <%= f.label :employee %><br>
     <%= f.collection_select(:employee_ids, Employee.all.collect, :id, :full_name, {:prompt => "Please select"} ) %>
</div>

しかし、Rails 4 と強力なパラメーターで何が変わったのかわかりません。Rails 3 では、このタイプの関連付けとフォームは、strong_parameters の代わりに attr_accessible を使用して機能しました。

関連ファイル

エラーの完全なトレース: https://gist.github.com/leemcalilly/0cb9e2b539f9e1925a3d

models/checkout.rb: https://gist.github.com/leemcalilly/012d6eae6b207beb147a

controllers/checkouts_controller.rb: https://gist.github.com/leemcalilly/a47466504b7783b31773

views/checkouts/_form.html.erb https://gist.github.com/leemcalilly/ce0b4049b23e3d431f55

models/employee.rb: https://gist.github.com/leemcalilly/46150bee3e6216fa29d1

controllers/employees_controller.rb: https://gist.github.com/leemcalilly/04f3acdac0c9a678bca8

models/employment.rb: https://gist.github.com/leemcalilly/6adad966dd48cb9d1b39

デシベル/schema.rb: https://gist.github.com/leemcalilly/36be318c677bad75b211

4

3 に答える 3