无法弄清楚为什么表单不会保存到rails上的数据库ruby

时间:2015-03-21 02:13:28

标签: ruby-on-rails ruby

我正在尝试将一副“产品”称为一副眼镜保存到具有以下数据字段的数据库中 - 名称,镜头,框架,寺庙,口音,数量,照片。

应用程序/控制器/ 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控制台,选择该记录,然后通过控制台手动添加数量......我错过了什么?

提前致谢!

1 个答案:

答案 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
  }
}