7 Stimmen

Rails 4 simple_form hat viele durchgehende Kontrollkästchen speichern nicht

Ich versuche, eine Tabelle für wiederkehrende Mitarbeiterabzüge über Kontrollkästchen mithilfe von simple_form zu implementieren. Mein Code funktioniert, aber die ausgewählten wiederkehrenden Abzüge werden nicht in meiner Tabelle gespeichert. Ich kann nicht herausfinden, warum.

Hier sind meine Modelle.

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

Migration

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

Formular

<%= 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: 'Wiederkehrende Abzüge' %>

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

Controller

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

Hier ist mein bearbeitetes Protokoll

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" = 'mark@yahoo.com' 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)

22voto

markhorrocks Punkte 1891

Ich brauchte die folgenden starken Parameter

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X