Неверная ассоциация. Убедитесь, что acceptpts_nested_attributes_for используется для

У меня есть форма check_in (резервирования), в которой в какой-то момент я хочу иметь вложенную форму для добавления к ней room_requests:

= nested_form_for @reservation, url: check_in_check_in_path, method: 'put' do |f|
  = f.fields_for :guests do |guest_form|
    = label_tag t('users.new.first_name'), nil,  class: 'grey h2 input-label'
    = guest_form.text_field(:first_name, class: 'check-in-input')
    (...)
  = f.link_to_add "Add guest", :guests

  = f.fields_for :room_requests do |room_form|
    = label_tag nil, t('rooms.new.category'), class: 'grey h2'
    = room_form.select(:room_category_id, current_hotel.room_categories.collect {|p| [ p.category, p.id, rate: p.base_rate ] }, {}, class: 'dropdown form-input category-dropdown')
  (...)
  = f.link_to_add "Add room request", :room_requests

Из приведенного выше кода кнопка "Добавить гостя" работает, а "Добавить запрос номера" - нет.

Из модели бронирования:

class Reservation < ActiveRecord::Base
  has_many :guests
  accepts_nested_attributes_for :guests, allow_destroy: false
  has_many :room_requests, dependent: :destroy, inverse_of: :reservation
  accepts_nested_attributes_for :room_requests, allow_destroy: true
end

И booking_controller.rb:

class ReservationsController < ApplicationController
  def reservation_params
    params.require(:reservation).permit(
    :start_date, :end_date, :status, :tag_list, :sales_channel_id,
    :comments, :room_category_id, :client_id,
    client_attributes: [:id, :hotel_id, :first_name, :last_name, :address, :country,
                        :doc_type, :doc_number, :email, :phone, :city],
    room_requests_attributes: [:id, :adults, :children, :room_category_id, :hotel_id,
                               :price,  :rate_id, :room_id, :_destroy],
    guests_attributes: [:id, :first_name, :last_name, :nationality, :room_request_id,
                        :doc_type, :doc_number])
  end
end

Что мне не хватает?

1 ответ

На первый взгляд кажется, что для гостя у вас есть:

= f.link_to_add "Add guest", :guest

Но для room_requests у вас есть:

= f.link_to_add "Add room request", :room_requests

Попробуйте сделать:room_requests единственное число =>:room_request

Другие вопросы по тегам