проблема с использованием form / formtastic на 2 объекта - PullRequest
0 голосов
/ 26 июля 2011

У меня действительно проблемы с этим. У меня есть модель appointment и модель appointment_block. Таблица назначения_блоков сохраняет время начала и окончания как дату и время. Я использую метод с именем split_time_block, который разбивает мне временной интервал на 15-минутные пакеты и возвращает его в виде массива строк. Это отлично работает. Я могу выбрать другое время в кнопке выбора. Таблица appointments обозначает назначение_блок_идентификатора. С моей формой я хочу отправить block_id к моей новой записи в таблице встреч. Я получаю только null записей в этом столбце.

= semantic_form_for(@appointment) do |f|
  -f.inputs do

    -@appointment_blocks.each do |form|
      =f.input :date, ,:as => :select, :collection =>  form.split_time_block

    = f.input :category, :collection => Category.all, :as => :select
    = f.input :memo

  - f.buttons do
    = f.commit_button

Мои назначения_контроллер содержит:

@appointment = Appointment.new  
@appointment_blocks = AppointmentBlock.all

Спасибо за совет !!

1 Ответ

1 голос
/ 26 июля 2011

назначение и назначение_блок не связаны каким-либо значимым образом в вашей форме (как вы обнаружили).

Предполагая, что в вашей модели (ях) установлено значение accepts_nested_attributes_for:

semantic_form_for(@appointment) do |f|
   f.inputs do

    f.semantic_fields_for :appointment_block do |ab_form|
      ab_form.input :date, ,:as => :select, :collection => split_time_block
    end

    f.input :category, :collection => Category.all, :as => :select
    f.input :memo

    f.buttons do
    f.commit_button
end

Ваша форма должна выглядеть примерно так. Затем, когда ваше представление будет отображено, проверьте разметку, и вы увидите правильное вложение, встроенное в идентификаторы и имена элементов. Когда это будет отправлено вашему контроллеру и вы создадите экземпляр объекта модели Appointment в вашей функции create, вы сможете увидеть вложенные объекты:

@appointment = Appointment.new params[:appointment]
flash[:notice] = @appointment.appointment_block.inspect <-- you should be able to see that the objects are nested properly, and in the db the id's line up properly.

Документация Formtastic (ищите вложенные формы примерно на полпути)

...