Trials
我在和之间有 has_many 关系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
. 但是,我仍然想知道如何在没有解决方法的情况下使其正常工作。