我正在尝试将一副“产品”称为一副眼镜保存到具有以下数据字段的数据库中 - 名称,镜头,框架,寺庙,口音,数量,照片。
应用程序/控制器/ product_controller.rb
def create
@product = Product.create(product_params)
end
# Each pair of glasses has a name, lens, frame, accent, quantity, and picture
def product_params
params.require(:product).permit(:name, :lens_id, :frame_id, :temple_id, :accent_id, :quantity, :photo)
end
应用程序/视图/产品/ _form.html.erb
<div class="field">
....
<%= f.label :quantity %>
<%= number_field_tag :quantity, nil, class: 'form-control', min: 1
</div>
我可以保存记录,除了保存为'nil'的数量外,所有内容都保存到数据库中。我可以进入rails控制台,选择该记录,然后通过控制台手动添加数量......我错过了什么?
提前致谢!
答案 0 :(得分:2)
错误是您用于:quantity
的帮助程序标记的结果。您应该使用表单构建器助手number_field
而不是通用number_field_tag
。
它应该是这样的:
<%= f.number_field :quantity, nil, class: 'form-control', min: 1 %>
如果这不适合您(可能是由于您的Rails版本),您可以覆盖type
上的text_field
属性并尝试:
<%= f.text_field :quantity, nil, class: 'form-control', type: :number, min: 1 %>
如果您想知道原因,您需要了解Rails如何构建POST表单数据。使用表单构建器form_for
,您将看到所有表单字段都遵循约定object_class[attribute]
。在您的示例中,它会product[name]
,product[lens_id]
等...
通过使用number_field_tag
,它创建了一个名为quantity
的输入,但您需要它为product[quantity]
,这样当您致电Product.create(product_params)
时,它会包含提供的值。< / p>
你的代码正在为params产生这个:
{
product:
{
name: '...',
lens_id: 1
},
quantity: 1
}
与预期相符:
{
product:
{
name: '...',
lens_id: 1,
quantity: 1
}
}