【问题标题】:HAML: f.object (form_for) local passed to partial is nilHAML:传递给部分的 f.object (form_for) 本地为 nil
【发布时间】:2016-04-04 17:10:28
【问题描述】:

试图制作一个通用的部分来显示错误消息。将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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 haml


    【解决方案1】:

    这与 HAML 无关。

    您没有将对象传递给form_for,因此f.object 确实是nil

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

    = form_for @post do |f|
    

    【讨论】:

    • 感谢 Vasfed,我刚刚发现了同样的事情 :) 非常支持,伙计们!
    【解决方案2】:

    您可能希望在 form_for 块内呈现 error_messages。您在此处发布的方式 - render 没有缩进,因此它没有嵌套在 form_for

    【讨论】:

    • 在我的代码中,它是正确缩进的。这只是在此处复制代码时引入的错误。问题一定出在其他地方。但很好的收获!
    【解决方案3】:

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

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

    这是行不通的。您需要使用 IVAR @post 才能使用它。

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

    【讨论】:

      猜你喜欢
      • 2015-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      相关资源
      最近更新 更多