Ошибка недопустимых параметров при создании записей записей потомков в формах дедов - PullRequest
0 голосов
/ 12 октября 2018

У меня есть три модели Book_Room, Invoice и Bill.Invoice принадлежит BookRoom и имеет много счетов.ошибка - недопустимая ошибка параметров для: счет-фактура выдается, когда я пытаюсь создать Книжную комнату после того, как я четко попросил принять вложенные параметры

class Invoice < ApplicationRecord
  belongs_to :book_room
  has_many :bills
  accepts_nested_attributes_for :bills
end

И BookRoom должен иметь только один счет, но я использовалhas_many, поскольку форма fields_for не отображается при использовании has_one.

class BookRoom < ApplicationRecord
  belongs_to :customer
  has_and_belongs_to_many :rooms
  has_many :invoices
  accepts_nested_attributes_for :invoices
end

Вот мое действие create для контроллера invoice:

def create
  @booking = BookRoom.find(params[:book_room_id])
  @invoice = @booking.invoice.new(invoice_params)

  if @invoice.save
    redirect_to @invoice, notice: 'Invoice was successfully created.'
  else
    render :new
  end
end

А вот моя форма, которая предназначена для создания счетов и счетов.

<%= f.fields_for :invoice do |i| %>
  <%= i.fields_for :bill do |b| %>
    <%= b.label :price %>
    <%= b.number_field :price %>
    <%= b.hidden_field :type, value: :deposit %>
  <% end %>
<% end %>

И, наконец, мой book_room контроллер:

def create
  @book_room = @customer.book_rooms.new(book_room_params)

  if @book_room.save
    redirect_to @book_room, notice: 'Book room was successfully created.'
  else
    render :new
  end
end
def book_room_params
  params.require(:book_room).permit(:customer_id, :start_date, :end_date, :room_ids=>[], :invoices_attributes => [ :invoice_id, :bills_attributes => [:price, :type] ])
end

Когда я пытаюсь создать книжную комнату с записями счетов, она выдает ошибку из-за неразрешенного счета-фактуры за параметры.Если есть способ получить форму для отображения на has_one отношениях, я буду признателен за это.

1 Ответ

0 голосов
/ 12 октября 2018

Попробуйте переключиться на has_one :invoice ассоциацию - fields_for может работать с ним, но сначала вам нужно создать ассоциацию с @book_room.build_invoice в BookRoomController#new действии контроллера.

Тогда вы можете исправить book_room_params - изменить invoices_attributes ключ на единственное число invoice_attributes.

...