Поскольку вы сказали, что у вас есть coffescript, скрывающий ввод, если подкатегория не существует, но я не уверен, удаляет ли он ввод из dom, или просто скрывает его с помощью css.
Вариант 1:
Если coffeescript удаляет его из домена, вы можете добавить скрытый ввод:
<%= form.hidden_field : product_subcategory_id, value: 0 %>
Таким образом, рельсы забирают его при отправке, и вы можете обрабатывать его вHTML против контроллера, если это то, что вы предпочитаете.Это будет работать только в том случае, если выборка удалена из домена, а не скрыта.
Опция 2:
Если coffeescript просто скрывает его с помощью CSS, вы можете установить значение по умолчанию для первого/ выбранный параметр равен 0.
<%= form.select :product_subcategory_id, options_for_select([["", 0], "Foo", "Bar", "Buzz"]) %>
Возможно, вам придется создавать свои параметры вручную вместо использования grouped_collection_select, если вы переходите к варианту 2, поэтому вы можете добавить пользовательский параметр по умолчанию, который по умолчанию равен 0.
Вариант 3:
Обрабатывать его в методе / службе контроллера.
subcategory_id = params[:product_subcategory_id] ? params[:product_subcategory_id] : 0
Надеюсь, это поможет или даст вам некоторые идеи!
РЕДАКТИРОВАТЬ:
Mutating product_params, вероятно, самый простой.
def update
@product = Product.find(params[:id])
product_params[:product_subcategory_id] = 0 unless product_params[:product_subcategory_id]
if @product.update_attributes(product_params)
flash[:success] = "Updated successfully."
redirect_to admin_products_path
else
render 'edit'
end
end
Если вы не хотите изменять, вы можете:
def update
@product = Product.find(params[:id])
# Similiar to .new, but for updating.
@product.assign_attributes(product_params)
# Override the existing subcategory if product_params[:product_subcategory_id] is falsey
@product.product_subcategory_id = 0 unless product_params[:product_subcategory_id]
# Save
if @product.save
flash[:success] = "Updated successfully."
redirect_to admin_products_path
else
render 'edit'
end
end
Или, если вы находитесь на Rails 5+, вы можете установитьпо умолчанию с атрибутами api.
class Product < ApplicationRecord
attribute :product_subcategory_id, :integer, default: 0
end