Я работаю над приложением Rails 5.2, требующим хранения Quote
и одного QuoteLineItem
с ним (Quote
has_one :quote_line_item
, QuoteLineItem
belongs_to :quote
). Я настроил все в соответствии с документацией, однако при отправке quotes#edit
для (который содержит fields_for @quote.quote_line_item...
) значения для записи Quote
обновляются в базе данных, однако значения для QuoteLineItem
не , При отправке не выдается никакой ошибки, а в журналах сервера нет сообщения «Unpermitted params ...».
Цитата Модель
class Quote < ApplicationRecord
has_one :quote_line_item, inverse_of: :quote, dependent: :destroy
accepts_nested_attributes_for :quote_line_item, update_only: true
end
QuoteLineItem Модель
class QuoteLineItem < ApplicationRecord
belongs_to :quote, inverse_of: :quote_line_item, touch: true
end
Контроллер котировок
class QuotesController < ApplicationController
def update
@quote = Quote.find(params[:id])
if @quote.update(quote_params)
flash[:success] = "Quote was successfully updated."
redirect_to @quote
else
flash[:error] = "Quote was not updated. Please try again."
render :edit
end
end
private
def quote_params
params.require(:quote).permit(:issued_at, quote_line_item_attributes: [ :kind, :description, :price ])
end
end
Цитировать Редактировать Просмотр
<%= form_for @quote do |quote_form| %>
<% if @quote.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@quote.errors.count, "error") %> prohibited this quote from being saved:</h2>
<ul>
<% @quote.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= quote_form.label :issued_at %>
<%= quote_form.datetime_field :issued_at %>
<%= fields_for :quote_line_item, @quote.quote_line_item do |quote_line_item_fields| %>
<%= quote_line_item_fields.label :description %><br>
<%= quote_line_item_fields.text_field :description %>
<%= quote_line_item_fields.label :price %>
<%= quote_line_item_fields.number_field :price, step: :any %>
<% end %>
<% end %>
Журналы сервера
Started PATCH "/quotes/62" for 127.0.0.1 at 2018-11-12 13:01:46 +0800
Processing by QuotesController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"bVa+vhRayuPDhe5xkLcK2rm10zQ9oHvtDSZsKDhMBsdX/JDjf6uXsnIJ7gM/yP7Lt9E+aBGIR9WCoLU2uNhgVQ==", "quote"=>{"issued_at"=>"12/11/2018 11:05 AM"}, "quote_line_item"=>{"description"=>"QuoteLineItem description goes here...", "price"=>"800.00"}, "commit"=>"Save", "id"=>"62"}
Quote Load (3.8ms) SELECT `quotes`.* FROM `quotes` WHERE `quotes`.`id` = 62 LIMIT 1
↳ app/controllers/quotes_controller.rb:127
(0.7ms) BEGIN
↳ app/controllers/quotes_controller.rb:53
(3.6ms) COMMIT
↳ app/controllers/quotes_controller.rb:53
Redirected to http://localhost:3000/quotes/62
Completed 302 Found in 44ms (ActiveRecord: 9.3ms)
Есть ли причина, по которой это не должно работать?
Спасибо.