2013-08-12 14 views
7

simple_formを使用して、従業員の反復控除テーブルをチェックボックスで実装しようとしています。私のコードは動作しますが、選択された反復控除は私のテーブルに保存されません。なぜ私はうまくいかない。Rails 4 simple_form has_many throughチェックボックスは保存されません

私のモデルです。

class Employee < ActiveRecord::Base 
    belongs_to :club 
    has_many :employee_recurrents 
    has_many :recurrents, :through => :employee_recurrents 
end 

class Recurrent < ActiveRecord::Base 
    belongs_to :club 
    has_many :employee_recurrents 
    has_many :employees, :through => :employee_recurrents 
end 

class EmployeeRecurrent < ActiveRecord::Base 
    belongs_to :employee 
    belongs_to :recurrent 
end 

移行

class CreateEmployeeRecurrents < ActiveRecord::Migration 
    def change 
    create_table :employee_recurrents, :id => false do |t| 

     t.references :employee 
     t.references :recurrent 

    end 

    add_index :employee_recurrents, [:employee_id, :recurrent_id] 
    add_index :employee_recurrents, [:recurrent_id, :employee_id] 

end 
end 

フォーム

<%= simple_form_for @employee, html: {class: 'form-horizontal' } do |f| %> 

    <%= f.error_notification %> 

    <%= f.input :first_name %> 
    <%= f.input :last_name %> 

    <%= f.association :recurrents, 
        as: :check_boxes, 
        label_method: :description, 
        value_method: :id, 
        label: 'Recurrent Deductions' %> 

    <%= f.button :submit, class: 'btn btn-primary' %> 
<% end %> 

コントローラここ

def employee_params 
    params.require(:employee).permit(:first_name, :recurrent_ids) 
end 

は私の編集したログは

です
Started PATCH "/employees/1" for 127.0.0.1 at 2013-08-12 19:38:42 +0800 
Processing by EmployeesController#update as HTML 
    Parameters: {"utf8"=>"✓",  "authenticity_token"=>"IwWzcT2qQJqHkTumWjb3OD5nJe9xLaA+YezMumer9X8=", "employee"=>{"job_id"=>"5", "manager_id"=>"", "first_name"=>"Mark", "recurrent_ids"=>["1", ""]}, "commit"=>"Update Employee", "id"=>"1"} 
    [1m[36mActiveRecord::SessionStore::Session Load (1.2ms)[0m [1mSELECT "sessions".* FROM "sessions" WHERE "sessions"."session_id" = '9a8b066a4033f8fa2ed867371ffaa2a3' ORDER BY "sessions"."id" ASC LIMIT 1[0m 
    [1m[35mUser Load (0.5ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 
    [1m[36mEmployee Load (0.8ms)[0m [1mSELECT "employees".* FROM "employees" WHERE "employees"."id" = $1 ORDER BY last_name, first_name LIMIT 1[0m [["id", "1"]] 
Unpermitted parameters: recurrent_ids 
    [1m[35m (0.6ms)[0m BEGIN 
    [1m[36mEmployee Exists (1.1ms)[0m [1mSELECT 1 AS one FROM "employees" WHERE ("employees"."email" = '[email protected]' AND "employees"."id" != 1 AND "employees"."club_id" = 1) LIMIT 1[0m 
    [1m[35m (0.4ms)[0m COMMIT 
Redirected to http://localhost:3000/employees 
Completed 302 Found in 22ms (ActiveRecord: 4.6ms) 
+1

Serverのログは有用であろう次のように強いのparamsを必要としていました。私のために必要ではないが、他の誰かのためにすることができます。 :) – rmagnum2002

+0

'f.association:recurrents'だけで何ができますか?それは動作しますか(たとえ入力要素のタイプが間違っていても、チェックボックスの上にドロップダウンが表示されます)? –

+0

私はログを投稿しますが、 "Unpermitted parameters:recurrent_ids"と表示されていますが、私の従業員コントローラにはparams.require(:employee).permit(:first_name、recurrent_ids)が含まれています – markhorrocks

答えて

22

私は、提出の

def employee_params 
    params.require(:employee).permit(:first_name, :recurrent_ids => []) 
end 
+2

これはドキュメントにあります。パラメータが配列を予期している場合は、そのように定義する必要があります。 – rkamun1

関連する問題