У меня странная ошибка с ruby на рельсах. Я не знаю, является ли это ошибкой или чем-то еще, но прежде чем сообщить об этом, я просто хочу убедиться.
У меня есть полиморфная таблица, которая принадлежит_2 моделям.
полиморфная таблица
module Spree
class AccountPrice < Spree::Base
validates :accountable, presence: true
belongs_to :accountable, polymorphic: true
belongs_to :variant_price_set, class_name: "Spree::VariantPriceSet"
belongs_to :shipping_method_price_set, class_name: "Spree::ShippingMethodPriceSet"
accepts_nested_attributes_for :variant_price_set, :shipping_method_price_set
end
end
мой CorporateAccount может содержать многие из этих полиморфных таблиц.
class Spree::CorporateAccount < Spree::Base
has_many :account_prices, as: :accountable, autosave: true
accepts_nested_attributes_for :account_prices
end
Итак, в моем корпоративном представлении редактирования яиметь это.
<%= f.fields_for :account_prices do |ff| %>
<div class="row">
<%= ff.fields_for :variant_price_set do |fff|%>
<div class="col-md-2" >
<%= fff.text_field :id %>
</div>
<div class="col-md-2">
<%= fff.text_field :name %>
</div>
<% end %>
<%= ff.fields_for :shipping_method_price_set do |fff|%>
<div class="col-md-2">
<%= fff.text_field :id %>
</div>
<div class="col-md-2">
<%= fff.text_field :name %>
</div>
<% end %>
<div class="col-md-2">
start_date: <%= ff.text_field :exp_start_date%>
</div>
<div class="col-md">
end_date: <%= ff.text_field :exp_end_date%>
</div>
<div class="col-md">
staus: <%= ff.text_field :status%>
</div>
</div>
<% end %>
и на моем корпоративном контроллере, у меня есть это.
module Spree
module Admin
class CorporateAccountsController < ResourceController
def update
if @corporate_account.update_attributes(corporate_account_params)
flash.now[:success] = Spree.t(:corporate_account_updated)
end
render :edit
end
def corporate_account_params
params.require(:corporate_account).permit(:company_id,
:company_name,
:shipping_category_id,
:variant_price_set_id,
:shipping_method_price_set_id,
:corporate_token,
:corporate_token_confirmation,
:account_key,
:managed,
:billing_type,
:tax_exempt,
ship_address_attributes: permitted_address_attributes,
bill_address_attributes: permitted_address_attributes,
account_prices_attributes: [
:id, :exp_start_date, :exp_end_date, :status,
shipping_method_price_set_attributes: [:id, :name],
variant_price_set_attributes: [:id, :name]
]
)
end
end
end
end
все, что на этом сильном обновлении параметров. за исключением глубоко вложенных. shipping_method_price_set_attributes
и variant_price_set_attributes
.
Поэтому, когда я меняю Id на любом из наборов цен и перехватываю его на корпоративном контроллере, используя точку останова vscode, значение params не изменяется. например, когда я ввожу 3 и нажимаю точку останова, проверяю параметры на прежние данные. Любая идея? Я думаю, что это ошибка. потому что до этого у меня было variant_price_set
, оно обновлялось нормально, но когда я добавил shipping_method_price_set
, оно больше не обновляется. надеюсь, что моя проблема имеет смысл
Пример параметров
{
"utf8": "✓",
"authenticity_token": "IOZB+SbHtP+rrK2j1LqI039lOe8BB95vQXChUERb8dWNcM+YqUSaur3wMxWHmxDWFyIq8SkvQ9E7aJmv7TV5iw==",
"corporate_account": {
"company_id": "waaaaaaaaaa",
"company_name": "QQQ",
"corporate_token": "",
"corporate_token_confirmation": "",
"account_key": "",
"tax_exempt": "0",
"billing_type": "creditcard",
"shipping_category_id": "",
"account_prices_attributes": {
"0": {
"variant_price_set_attributes": {
"id": "2",
"name": "Another Test Price Set"
},
"shipping_method_price_set_attributes": {
"id": "2",
"name": "Test Shipping Method Price Set 2"
},
"exp_start_date": "2019-10-11 17:42:36 UTC",
"exp_end_date": "2019-11-10 17:42:36 UTC",
"status": "temporary",
"id": "2"
},
"1": {
"variant_price_set_attributes": {
"id": "1",
"name": "Test Price Set"
},
"shipping_method_price_set_attributes": {
"id": "1",
"name": "Test Shipping Method Price Set"
},
"exp_start_date": "2019-10-11 17:42:36 UTC",
"exp_end_date": "2019-10-11 17:42:36 UTC",
"status": "temporary",
"id": "1"
}
}
},
"button": "",
"id": "1"
}
ОБНОВЛЕНИЕ СЕТЬ TAB POST REQ
corporate_account[company_id]: waaaaaaaaaa
corporate_account[company_name]: QQQ
corporate_account[corporate_token]:
corporate_account[corporate_token_confirmation]:
corporate_account[account_key]:
corporate_account[tax_exempt]: 0
corporate_account[billing_type]: creditcard
corporate_account[shipping_category_id]:
corporate_account[account_prices_attributes][0][variant_price_set_attributes][id]: 3
corporate_account[account_prices_attributes][0][variant_price_set_attributes][id]: 2
corporate_account[account_prices_attributes][0][shipping_method_price_set_attributes][id]: 2
corporate_account[account_prices_attributes][0][shipping_method_price_set_attributes][id]: 2
corporate_account[account_prices_attributes][0][exp_start_date]:
corporate_account[account_prices_attributes][0][exp_end_date]:
corporate_account[account_prices_attributes][0][status]: default
corporate_account[account_prices_attributes][0][id]: 2
corporate_account[account_prices_attributes][1][variant_price_set_attributes][id]: 3
corporate_account[account_prices_attributes][1][variant_price_set_attributes][id]: 1
corporate_account[account_prices_attributes][1][shipping_method_price_set_attributes][id]: 2
corporate_account[account_prices_attributes][1][shipping_method_price_set_attributes][id]: 1
corporate_account[account_prices_attributes][1][exp_start_date]:
corporate_account[account_prices_attributes][1][exp_end_date]:
corporate_account[account_prices_attributes][1][status]: default
corporate_account[account_prices_attributes][1][id]: 1
ОБНОВЛЕНИЕ 2
, поэтому я сделал запрос, используя бессонницу с той же структурой параметров. но когда я пытаюсь изменить эти значения
"variant_price_set_attributes": {
"id": "1"
},
"shipping_method_price_set_attributes": {
"id": "1"
},
, я получил ошибку маршрутизации. это странно
ОБНОВЛЕНИЕ 2.1 Итак, я обнаружил еще одну странную вещь. по какой-то причине от бессонницы при попытке отладить это. Когда я изменяю значение variant_price
или shipping_method
, я получаю эту ошибку стека
Started PUT "/spree/admin/corporate_accounts" for ::1 at 2019-10-14 12:06:55 -0700
User excluded error: #<ActionController::RoutingError: No route matches [PUT] "/spree/admin/corporate_accounts">
ActionController::RoutingError (No route matches [PUT] "/spree/admin/corporate_accounts"):
actionpack (4.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
web-console (2.3.0) lib/web_console/middleware.rb:28:in `block in call'
web-console (2.3.0) lib/web_console/middleware.rb:18:in `catch'
web-console (2.3.0) lib/web_console/middleware.rb:18:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.6) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.6) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in `block in tagged'
Если вы проверите ошибку исключенного пользователя, она говорит, что ни один маршрут не соответствует его, потому что идентификационный номер corporate_accounts потеряна длякакая-то странная причина. маршрут должен быть /spree/admin/corporate_accounts/1
это круто и раздражает.