2

我在我的 Ruby on Rails 应用程序中的侧边栏中有一个横幅,它由一大块 HTML 显示,views/home/index.html但我还有另一个横幅。我想在每次有人查看页面时随机显示其中一个。

<section id="audio-banner">
<a onclick="changeClass("#swap") href="#">
<img src="someImage.gif" >
</a>
</section>

<section id="audio-banner">
<a onclick="changeClass("#swap2") href="#">
<img src="someOtherImage.gif" >
</a>
</section>

我是 Ruby 和 Rails 的新手。我不确定将预定义的 HTML(模型、控制器、帮助程序等)放在哪里,或者如何编写将随机显示这两者之一的函数。

我开始编辑helpers/home_helper.rb并插入以下代码

module StoreHelper
  def randomAudio
    audio1 = '<section id="audio-banner">'
    audio1 << '<a onclick="changeClass("#swap"); return false;" href="#">'
    audio1 << '<img src="some.gif">'
    audio1 << '</a>'
    audio1 << '</section>'
    audio1
    audio2 = '<section id="audio-banner">'
    audio2 << '<a onclick="changeClass("#swap2"); return false;" href="#">'
    audio2 << '<img src="someOther.gif" alt="Estate">'
    audio2 << '</a>'
    audio2 << '</section>'
    audio2
  end
end

但这就是我所得到的,因为我知道这是不正确的。任何帮助都会很棒。谢谢。

4

3 回答 3

5

这是您的代码的改进版本(应该可以)。请注意,在实际应用中,您应该将这些 HTML 部分移动到部分。但是在这里,为了简单起见,让我们将它们内联。

module StoreHelper
  def randomAudio
    audio1 = <<-HTML
    <section id="audio-banner">
      <a onclick="changeClass("#swap"); return false;" href="#">
        <img src="some.gif">
      </a>
    '</section>
    HTML

    audio2 = <<-HTML
    <section id="audio-banner">
      <a onclick="changeClass("#swap2"); return false;" href="#">
        <img src="someOther.gif" alt="Estate">
      </a>
    </section>
   HTML

   # pick one of them randomly
   [audio1, audio2].sample
  end
end

它使用heredocs来定义 HTML 片段而没有额外的噪音。另请阅读有关Array#sample的信息。

于 2013-01-08T14:34:00.617 回答
4

在我看来,将纯 HTML 放入助手中似乎不合适。我可能会创建 2 个部分:shared/_audio1.html.erb并且shared/_audio2.html.erb考虑到您将来可能希望在不同的页面上显示这些横幅。现在你需要做的就是随机渲染这个部分:

= render "shared/%s.html.erb" % ["audio1", "audio2"].sample

部分的名称是硬编码的,但它应该能让你继续前进。

于 2013-01-08T14:40:44.230 回答
-2

不要为部分或助手而烦恼。

在您的home_controller中,设置一个可能的图像数组。如果要从文件夹生成它,请使用:

# Loads from public directory and subsequently removes public from the path
# so that you can use it as your image URI.
@images = Dir.glob("public/banner-images/*.gif").map{|i| i.gsub(/^public/, "") }

然后在你的views/home/index.html.erb

<%= image_tag @images.select %>

简单的。

于 2013-01-08T14:48:47.673 回答