【问题标题】:Passing variables through multiple partials (rails 4)通过多个部分传递变量(rails 4)
【发布时间】:2016-05-08 09:07:34
【问题描述】:

我试图通过多个部分传递实例变量并且遇到了麻烦。 undefined local variable or method "product"

Application.html.erb"

    <%= render 'shared/footer', :product => @product %>

_footer.html.erb

<%= render 'shared/my_form', :product => product %>

_my_form.html.erb

<%= form_for( product ) %>

更新:

我开始认为这可能是实例变量 @product 没有被设置/传递给重定向。以下是否会导致问题?在此处打开不同的问题:

Instance variable not set with redirect

【问题讨论】:

  • 我可能不理解这个问题,但是在第二行和第三行中将product 更改为@product 是否有效?

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


【解决方案1】:

如果你想传递局部变量,你应该使用这个语法:

 <%= render partial: 'shared/footer', locals: { product: @product } %>
 <%= render partial: 'shared/my_form', locals: { product: product } %>
 <%= form_for( product ) %>

供参考:http://guides.rubyonrails.org/layouts_and_rendering.html (3.4.4)

【讨论】:

    【解决方案2】:

    你必须使用这个语法:

    Application.html.erb"

    <%= render partial: 'shared/footer', locals: {:product => @product} %>
    

    _footer.html.erb

    <%= render partial: 'shared/my_form', locals: {:product => product} %>
    

    _my_form.html.erb

    <%= form_for( product ) %>
    

    注意partial:locals:的使用

    【讨论】:

    • 您发布的内容与我 14 分钟前发布的内容完全相同。
    • @PeterdeRidder,我更新了我的帖子。但是,我认为实例变量现在没有正确设置。此外,您的帖子和 marwen 的帖子略有不同,第二行是 '@product' vs product for the my_form partial。
    • 我的错,是错字。由于您使用局部变量调用 shared/footer,因此您应该在页脚中使用该局部变量。因此,您应该在那里使用产品而不是@product。我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多