我正在使用“使用Rails 4进行敏捷Web开发”这本书,我的HAML代码遇到了一些困难。
我不太确定我做错了什么,但是当我去构建一个新产品时,我的表格没有渲染。我检查源代码,它不在HTML中,所以我的代码有问题,但不知道是什么。希望有人可以帮助我。
这是我的Form.html.haml代码
=if @product.errors.any?
%div{ :id => "error_explanation" }
%h2
=pluralize(@product.errors.count, "error")
prohibited this product from being saved:
%ul
=@product.errors.full_messages.each do |msg|
%li
=msg
%div{ :class => "field" }
=f.label :title
=f.text_field :title
%div{ :class => "field" }
=f.label :description
=f.text_area :description, rows: 6
%div{ :class => "field" }
=f.label :image_url
=f.text_field :image_url
%div{ :class => "field" }
=f.label :price
=f.text_field :price
%div{ :class => "actions" }
=f.submit
这是我的New.html.haml
%h1 New Product
=render 'form'
=link_to 'Back', products_path
提前谢谢。
答案 0 :(得分:1)
根据 meagar 和 theTRON 提供的答案以及您的上次评论:
你在哪里揭开表格对象?它似乎无处可去,因此你得到了那个错误。通过form_for方法将表单绑定到模型对象时,它会生成表单构建器对象(f变量)。
尝试以下内容:
<%= form_for @product, url: {action: "create"} do |f| %>
# your code using f variable ...
<% end %>
如果最终修复了您的代码,请告诉我们。
答案 1 :(得分:0)
部分需要使用_
前缀命名。
您的Form.html.haml
必须被称为_form.html.haml
。
答案 2 :(得分:0)
除了确保您的表单名为_form.html.haml
之外,您还需要在HAML中修复一些嵌套。它应该看起来像这样:
=if @product.errors.any?
%div{ :id => "error_explanation" }
%h2
=pluralize(@product.errors.count, "error")
prohibited this product from being saved:
%ul
=@product.errors.full_messages.each do |msg|
%li
=msg
%div{ :class => "field" }
=f.label :title
=f.text_field :title
%div{ :class => "field" }
=f.label :description
=f.text_area :description, rows: 6
%div{ :class => "field" }
=f.label :image_url
=f.text_field :image_url
%div{ :class => "field" }
=f.label :price
=f.text_field :price
%div{ :class => "actions" }
=f.submit
您目前在表单字段中的缩进将其放在if @product.errors.any?
块的范围内,这意味着只有在@product
出错时才会显示该表单。