cycle()一个image_tag

时间:2012-03-28 18:29:12

标签: ruby-on-rails haml

我想显示不同的图片版本:

第一篇文章:大横幅

第二个:漂浮到右/左的小横幅

所以,首先:使用cycle()但不起作用:

= cycle(image_tag(banner_big), image_tag(banner_small)

= image_tag(cycle(banner_big_path, banner_small_path))

仅显示第一张图片

有一种合适的方法来制作这样的人吗?

2 个答案:

答案 0 :(得分:2)

你的问题是rails希望你每次都使用相同的字符串集来调用循环。目前,您正在为每个循环调用传递一组不同的字符串,因此每次都会重置循环。新的循环总是以它们的第一个值开始,因此就是你描述的结果。

假设您的文章中包含名为small_pathbig_path的方法,例如

article.send(cycle("big_path","small_path"))

应返回备用图像路径。

答案 1 :(得分:0)

您可以使用session工具在那里存储索引并使用它们。例如:

# application_helper.rb
def session_banner_index
  session[:banner_index] || 0
end

def session_banner(*list)
  list[session_banner_index % list.length]
end

# application_controller.rb
def increment_session_banner_index!
  session[:banner_index] = (session[:banner_index] || 0) + 1
end

这些辅助方法接近您要求的界面:

 = image_tag(session_banner(banner_big, banner_small))