0

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

4

1 回答 1

1

您的表单具有start_timeand end_time,而您的参数允许start_dateand end_date。如果您在上面发布的代码是正确的,那很可能是您的问题。

于 2013-08-31T15:01:12.857 回答