Я создаю систему выставления счетов для продавца автомобилей, в которой каждый счет связан с одним клиентом и одним транспортным средством, при этом у клиентов может быть много счетов, а у транспортных средств также много счетов. У меня он работает с одной вложенной моделью, делая следующее:
purchase_invoice.rb
class PurchaseInvoice < ApplicationRecord
belongs_to :vehicle
accepts_nested_attributes_for :vehicle
end
vehicle.rb
class Vehicle < ApplicationRecord
has_many :purchase_invoices
end
purchase_invoices_controller.rb
def new
@vehicle = Vehicle.new
@purchase_invoice = @vehicle.purchase_invoices.build
end
def create
@vehicle = Vehicle.new
@purchase_invoice = @vehicle.purchase_invoices.build(invoice_params)
if @purchase_invoice.save
redirect_to @purchase_invoice
else
render 'new'
end
end
private
def invoice_params
params.require(:purchase_invoice).permit(:buyer, :location, :vehicle_price, :transfer_fee, :balance_due, :payment_cash, :payment_bank_transfer, :payment_comment, :status, vehicle_attributes: [:vrm, :date_first_registered, :make, :model, :colour, :transmission, :vin, :fuel, :power])
end
новый.html.erb
<%= form_with model: @purchase_invoice, local: true do |form| %>
<%= form.fields_for @vehicle do |vehicle_form| %>
<% end %>
<% end %>
Однако, когда я добавляю второе отношение, подобное этому:
purchase_invoice.rb
class PurchaseInvoice < ApplicationRecord
belongs_to :customer
belongs_to :vehicle
accepts_nested_attributes_for :customer
accepts_nested_attributes_for :vehicle
end
Я получаю сообщение об ошибке: «Недопустимые параметры: транспортное средство».
Кто-нибудь знает, почему? Кроме того, как мне изменить новое/создать действие контроллера для сборки, сохраняя при этом сильные параметры?
Я гуглил это уже четыре часа и много пробовал, но не повезло. Заранее спасибо всем!
Обновить
Вот мои журналы:
Started POST "/purchase_invoices" for 127.0.0.1 at 2018-03-20 15:10:01 +0000
Processing by PurchaseInvoicesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"JB8py9zNxew6aQ6/za3JHDEb4j8f9HGujTlS6P1Eyhb+5NtPPP47fW7AHBkt9eURcnXg0gh9Mf1DCKCSwvlAbg==", "purchase_invoice"=>{"customer"=>{"name"=>""}, "vehicle"=>{"vrm"=>"SA07SSX", "make"=>"VAUXHALL", "model"=>"MERIVA DESIGN", "colour"=>"Silver", "vin"=>"W0L0XCE7574216645", "date_first_registered"=>"20/03/2007"}, "vehicle_odomoter_reading"=>"", "vehicle_number_of_keys"=>"", "vehicle_mot_expiry"=>"", "vehicle_hpi_clear"=>"", "vehicle_comments"=>"", "buyer"=>"", "location"=>"", "vehicle_price"=>"", "transfer_fee"=>"0", "balance_due"=>"", "payment_cash"=>"", "payment_bank_transfer"=>"", "payment_comments"=>""}, "commit"=>"Create Purchase invoice"}
Vehicle Load (0.3ms) SELECT "vehicles".* FROM "vehicles" WHERE "vehicles"."vrm" = ? ORDER BY "vehicles"."id" ASC LIMIT ? [["vrm", "SA07SSX"], ["LIMIT", 1]]
Unpermitted parameters: :customer, :vehicle, :payment_comments
(0.1ms) begin transaction
(0.1ms) rollback transaction
Rendering purchase_invoices/new.html.erb within layouts/application
Rendered purchase_invoices/new.html.erb within layouts/application (10.2ms)
Rendered layouts/_header.html.erb (1.7ms)
Completed 200 OK in 63ms (Views: 54.4ms | ActiveRecord: 0.4ms)
vehicle
, а не вложенный атрибут транспортного средства, что вы разрешаете в параметрах с помощью этой строкиvehicle_attributes: [:vrm, :date_first_registered, :make, :model, :colour, :transmission, :vin, :fuel, :power]
- person gwalshington   schedule 20.03.2018attributes
, либо имеет место множественное число. Я бы посмотрел на разницу между тем, что разрешают ваши параметры, и тем, что вы отправляете. Кроме того, как упоминалось выше, у вас могут возникнуть проблемы с их ассоциациями. - person gwalshington   schedule 20.03.2018PurchaseInvoice
таблицу соединений и сохранитьid
автомобиля и покупателя при покупке, а не их атрибуты. - person gwalshington   schedule 20.03.2018PurchaseInvoice
имеет несколько соответствующих полей, а также идентификатор клиента и идентификатор транспортного средства. Я полагал, что это будет отношение has_many и own_to, поскольку счет-фактура принадлежит одному Клиенту и одному Транспортному средству, тогда у одного Клиента может быть много счетов-фактур, а у одного Транспортного средства может быть много счетов-фактур. Я что-то упускаю? - person Kurtis Fehr   schedule 20.03.2018_attributes
из разрешенных параметров. - person DickieBoy   schedule 20.03.2018