在Rails 3中:模板图像可以与正在显示的视图相关联吗?

时间:2011-01-26 05:38:59

标签: ruby-on-rails ruby-on-rails-3

对不起,我是Rails的新手,所以我会努力做到尽可能具体。

在我的模板中,我有一个大的“标题”样式图像。我想将该图像换成另一个与正在显示的视图相关联的图像。也许这可以使用助手来完成?我甚至不知道从哪里开始。

我知道我可以创建一堆模板页面,并使用所需的视图加载每个模板页面,但我认为当我只想交换一个图像时需要加载很多重复的代码行。有没有人有想法?

1 个答案:

答案 0 :(得分:2)

根据您的需要,有几个选项。我想到的第一件事就是创建一些辅助方法。一个用于从您的自定义视图调用,另一个用于从全局布局调用。

例如,创建一个文件app/helpers/layout_helper.rb

module LayoutHelper
  def header_image_tag
    @header_image ||= 'whatever-my-default-image-is.png'
    image_tag @header_image
  end

  def header_image(image_path)
    @header_image = image_path
  end
end

在您的布局文件中......例如app/views/application.html.erb。类似的东西:

<div id='banner'>
  <%= header_image_tag %>
</div>

在您不想要默认图像的个别视图文件中:

<% header_image 'other-image.png' %>

这应该让你开始。您可能希望允许header_image_tag使用一些选项传递给image_tag,或者设置一些可以覆盖的默认值。

您可以利用的另一件事是content_foryield阻止。

示例...在您的自定义视图中,您可以在视图的顶部放置类似的内容:

<% content_for :banner do %>
  <%= image_tag 'blah.png' %>
<% end %>

并在你的布局中

<div id='banner'>
  <%= yield :banner || image_tag 'my-default.png' %>
</div>