HAML:f.object (form_for) 局部传递给局部是零

HAML: f.object (form_for) local passed to partial is nil

正在尝试制作一个通用部分来显示错误消息。将 f.object 传递给它。但是 object 在我的局部中是 nil

new.html.haml

= form_for :post, url: posts_path do |f|

  = render 'shared/error_messages', object: f.object

  %p
    =f.label :title
    =f.text_field :title
  %p
    =f.label :body
    =f.text_area :body

    =f.submit "Create"

shared/_error_messages.html.haml

- if object.errors.any?
  #error_explanation
    .alert.alert-danger
      You made
      = pluralize(object.errors.count, "mistake")
      Please fix:
      %ul
        = object.errors.full_messages.each do |msg|
          %li= msg

在 ERB 中,这很简单。一切都正确缩进(我希望)但是如果我通过 local_assigns 检查内部部分,我得到 {:object=>nil,:error_messages=>nil}

Rails 4.2.5,HAML 4.0.7

可能您想在 form_for 块内渲染 error_messages。您在此处发布的方式 - render 没有缩进,因此它没有嵌套在 form_for

这与 HAML 没有任何关系。

您没有将对象传递给 form_for,所以 f.object 实际上是 nil

在控制器中使用@post = Post.new然后

= form_for @post do |f|

好的,解决了。出于某种原因,如果你这样做

= form_for :post, url: posts_path do |f|

这是行不通的。您需要使用 IVAR @post 才能正常工作。

= form_for @post, url: posts_path do |f|