我在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
我希望能够从试用版的编辑表单中添加和编辑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
试用版的直接属性按预期保存。但是在验证之前,试验槽的属性以某种方式被清空(:start_date和:end_date都是必需的,因此无法保存)。为什么?
更新
我通过允许每个参数解决了这个问题。
controller do
def permitted_params
params.permit!
end
end
在这种特定情况下,这是合理的,因为它都在/admin
内。但是我仍然想知道如何在没有解决方法的情况下使其工作。
答案 0 :(得分:1)
您的表单包含start_time
和end_time
,而您的参数允许start_date
和end_date
。如果您上面发布的代码是正确的,那可能就是您的问题。