Rails accepts_nested_attributes_for - форма простых форм - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть следующие модели AR:

class Branch < ActiveRecord::Base

    has_many :branch_delivery_schedules, :class_name => 'BranchDeliverySchedule', :foreign_key => :branch_id

    accepts_nested_attributes_for :branch_delivery_schedules, :allow_destroy => true
end


class BranchDeliverySchedule < ActiveRecord::Base

    validates :opening_time, :closing_time, presence: true

    belongs_to :day_of_week, :class_name => 'DayOfWeek', :foreign_key => :id_day_of_week
    belongs_to :branch, :class_name => 'Branch', :foreign_key => :branch_id
end

В филиале много графиков доставки (по одному в день, от М до S).

Итак, в форме ветки, когда я пытаюсь создать новую ветку, я установил simple_fields_for для BranchDeliverySchedules.

<%= simple_form_for(@branch, html: { class: 'form-foodwish' } ) do |f| %>

    <%= f.error_notification %>

    <!-- BRANCH FIELDS... -->
    <% (1..7).each do |w| %>

      <%= simple_fields_for 'branch[branch_delivery_schedules_attributes][]', BranchDeliverySchedule.new({ day_of_week: w, opening_time: '11:00', closing_time: '11:00' }) do |p| %>

        <%= p.input :id, as: :hidden %>

        <%= p.input :branch_id, as: :hidden %>

        <!-- DAY OF WEEK PLACEHOLDER -->
        <%= p.input :day_of_week, as: :hidden, input_html: { value: w } %>

        <%= p.input :opening_time,  as: :time, html5: true %>

        <%= p.input :closing_time,  as: :time, html5: true %>

      <% end %>

    <% end %>

<% end %>

Тогда у меня есть сильные параметры в моем контроллере:

def branch_params
  params.require(:branch).permit(:id, ..., branch_delivery_schedules_attributes: [ :id, :opening_time, :closing_time, :day_of_week, :branch_id] )  
end

И все работает нормально, 7 графиков доставки создаются. Вопросы:

1.- Как я могу показать ошибки проверки расписания доставки в филиале? (Сейчас он просто молча терпит неудачу, не позволяет мне сохранить ветку, что хорошо, но мне нужно показать ошибки проверки)

2.- Как я могу сохранить значения в моем simple_fields_for ?, когда я отправляю форму, значения во время выбора теряются.

Спасибо, дайте мне знать, если вам нужна дополнительная информация.

Версия Rails: 4.2.6

Версия простой формы: 3.4.0

1 Ответ

0 голосов
/ 07 сентября 2018

Контроллер

@branch =  Branch.new
(1..7).each { |w| @branch.branch_delivery_schedules.new(day_of_week: w, opening_time: '11:00', closing_time: '11:00') }

Просмотр

<%= f.simple_fields_for :branch_delivery_schedules do |p| %>
    <%= p.input :day_of_week, as: :hidden, input_html: { value: p.object.day_of_week } %>

    <%= p.input :opening_time,  as: :time, html5: true %>

    <%= p.input :closing_time,  as: :time, html5: true %>

  <% end %>
...