0

说我有一个像这样的动作模板

# home/index.html.erb
<%= img_tag "logo.gif" %>

如果我想为其添加 alt/title 属性,我可以这样做

# home/index.html.erb
<%= img_tag "logo.gif", alt: "alt!!", title: "title!!" %>

但我有 1000 个图像标签,我不想改变每一个。

然后我想到在从服务器输出之前使用机架中间件并修改图像标签。 http://railscasts.com/episodes/151-rack-middleware?view=asciicast

doc = Nokogiri.HTML(@response.body)
doc.search("img").each do |tag|
  [:alt, :title].each{|attribute| tag[attribute] = "changed!!" }
end

但是当我关注 railscast 剧集时,它会将整个主体附加到原件的顶部,而不是替换它。

我在机架上做错了吗,还是有更聪明的方法来做到这一点?

4

1 回答 1

3

更新的答案:

# /config/initializers/image_tag_helper.rb

module ActionView
  module Helpers
    module AssetTagHelper
      def image_tag(source, options={})
        options[:src] = path_to_image(source)
        options[:alt] = "Default Alt" unless options.has_key?(:alt)
        options[:title] = "Default Title" unless options.has_key?(:title)
        tag(:img, options)
      end
    end
  end
end

这会覆盖image_tag帮助器方法来设置默认值alttitle属性。

于 2013-03-14T11:10:04.580 回答