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 (モデル、コントローラー、ヘルパーなど) をどこに置くか、またはこれら 2 つのうちの 1 つをランダムに表示する関数を記述する方法がわかりません。

私は編集から始めて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

ヒアドキュメントを使用して、余分なノイズなしで HTML スニペットを定義します。Array#sampleについてもお読みください。

于 2013-01-08T14:34:00.617 に答える
4

プレーンな HTML をヘルパーに配置するのは、私には正しくないように思えます。おそらく 2 つのパーシャルを作成します。将来、これらのバナーを別のページに表示したいと思うかもしれませんshared/_audio1.html.erbshared/_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 に答える