activeadmin中的嵌套表单在验证前清空提交值

时间:2013-08-09 10:17:15

标签: ruby-on-rails activeadmin ruby-on-rails-4

我在TrialsTrialSlots之间有一个很好的关系。这是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内。但是我仍然想知道如何在没有解决方法的情况下使其工作。

1 个答案:

答案 0 :(得分:1)

您的表单包含start_timeend_time,而您的参数允许start_dateend_date。如果您上面发布的代码是正确的,那可能就是您的问题。