0

と の間に has_many 関係がTrialsありTrialSlotsます。これは次のapp/models/trial.rbとおりです。

class Trial < ActiveRecord::Base
  validates :title, :start_date, :trial_duration, :subjects_count, presence: true
  has_many :trial_slots
  accepts_nested_attributes_for :trial_slots
end

Trial の編集フォームから TrialSlots を追加および編集できるようにしたいので、これを追加しましたapp/admin/trial.rb

  form do |f|
    # […] some basic inputs skipped for brevity

    f.has_many :trial_slots do |trial_slot|
      f.inputs "Slots" do
        trial_slot.input :start_time, as: :time_picker
        trial_slot.input :end_time, as: :time_picker
      end

    end

    f.actions
  end

私はRails4を使用しているので、すでに追加する必要がありました:

  controller do
    def permitted_params
      params.permit(trial: [ :start_date, :trial_duration, :title,
                    :break_duration, :subjects_count, :reward, :location,
                    :agency_name, :agency_address, :contact_name,
                    :contact_email, :contact_phone, trial_slots_attributes: [:start_date, :end_date] ],
                   )
    end
  end

Trial の直接属性は期待どおりに保存されます。しかし、試行スロットの属性は、検証の前にどういうわけか空になっています (:start_date と :end_date の両方が必要なため、保存に失敗します)。なんで?

アップデート:

すべてのパラメーターを許可することで問題を回避しました。

  controller do
    def permitted_params
      params.permit!
    end
  end

この特定のケースでは、すべてが の内部にあるため、これは合理的です/admin。ただし、回避策なしでこれを機能させる方法はまだ疑問に思っています。

4

1 に答える 1