と の間に 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
。ただし、回避策なしでこれを機能させる方法はまだ疑問に思っています。