将呈现的部分分配给实例变量

时间:2014-05-13 08:42:32

标签: ruby variables ruby-on-rails-4 spree

在rails 4中,我想在页面的任何位置渲染部分(比如页脚)。

在home_controller.rb中,我在一个类中有这个:

def spree_application
 @test = render :partial => 'spree/shared/footer'
end

当我进入索引页面并添加:

<%= @test %>

什么都没发生。我知道我可以在索引页面内渲染,但我问是否有办法将渲染的链接分配给变量。

谢谢!

编辑:我对这个问题犯了一个错误。我已定义:spree_application

2 个答案:

答案 0 :(得分:10)

您正在寻找render_to_string

答案 1 :(得分:9)

Controller render方法与视图方法不同。您想在视图上下文中执行它:

 @test = view_context.render 'spree/shared/footer'

此方法与render_to_string之间的主要区别在于,它返回html_safe字符串,因此&lt;%= @ test%&gt;中的html标记不会被逃脱。

更新:

然而,这不是处理问题的正确方法。您正在寻找&#39; content_for&#39;。此方法允许您构建视图的一部分,可以在布局中使用。您需要做的就是修改布局:

# Your application layout
<html>
  <head>
  ...
  </head>
  <body>
    yield :image
    <div id="wrapper">
      yield
    </div>
  </body>
</html>

然后在您的视图中,您可以使用

指定要显示为yield :image的内容
<% content_for :image do %>
  <%# Everything here will be displayed outside of the wraper %>
<% end %>