病院でユニットを作成する単一のフォームを作成しようとしています。UnitShiftTypes テーブルでそのユニットに適用される shift_types を選択できます。Units と ShiftTypes の間に has_many と :through UnitShiftTypes があります。毎回エラーになるようです。私はこれを理解できないようです。どんな助けでも大歓迎です!
_form.html.erb
<%= simple_form_for(@unit) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :name %>
<%= f.input :number %>
<%= f.fields_for :unit_shift_type do |ff| %>
<%= f.select :shift_type_ids, ShiftType.all.collect {|x| [x.name, x.id, ]}, {}, :multiple => true %>
<%= ff.hidden_field :user_id, :value => current_user %>
<% end %>
<%= f.input :hospital_id %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
unit.rb
class Unit < ActiveRecord::Base
belongs_to :hospital
has_many :unit_users, :dependent => :restrict
has_many :unit_shift_types
has_many :users, :through => :unit_users, :dependent => :restrict
has_many :shift_types, :through => :unit_shift_types
attr_accessible :hospital_id, :name, :number, :unit_id, :unit_shift_types_attributes
accepts_nested_attributes_for :unit_shift_types
validates_presence_of :hospital_id, :name, :number
validates_uniqueness_of :number, :scope => :hospital_id, :message => "is already associated with this Hospital."
end
unit_shift_type.rb
class UnitShiftType < ActiveRecord::Base
belongs_to :shift_type
belongs_to :unit
attr_accessible :shift_type_id, :unit_id
validates_presence_of :shift_type_id, :unit_id
validates_uniqueness_of :shift_type_id, :scope => :unit_id, :message => "is already associated with this Unit."
end
shift_type.rb
class ShiftType < ActiveRecord::Base
has_many :unit_shift_types
attr_accessible :created_by_id, :enabled, :end_time, :name, :start_time
validates_presence_of :start_time, :end_time, :name, :created_by_id
end
units_controller.rb
# POST /units
# POST /units.json
def create
@unit = Unit.new(params[:unit])
respond_to do |format|
if @unit.save
format.html { redirect_to @unit, notice: 'Unit was successfully created.' }
format.json { render json: @unit, status: :created, location: @unit }
else
format.html { render action: "new" }
format.json { render json: @unit.errors, status: :unprocessable_entity }
end
end
end
# PUT /units/1
# PUT /units/1.json
def update
@unit = Unit.find(params[:id])
respond_to do |format|
if @unit.update_attributes(params[:unit])
format.html { redirect_to @unit, notice: 'Unit was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @unit.errors, status: :unprocessable_entity }
end
end
end
リクエスト パラメータ:
{"utf8"=>"✓", "authenticity_token"=>"CnIZCDbEVNr/B8fby2La8ibvtQtjycwO/BD0mQ2sOw4=", "unit"=>{"name"=>"1", "number"=>"1", "shift_type_ids"=>["", "1"], "unit_shift_type"=>{"user_id"=>""}, "hospital_id"=>"1"}, "commit"=>"Create Unit", "action"=>"create", "controller"=>"units"}