0

私の見解では、次のコードを取得しました。

<ul class="thumbnails">
  <% Photo.find_all_by_id(my_params, limit: 10).each do |p| %>
    <li class="thumbnail">
      <%= image_tag(p.url(:fb)) %>
    </li>
  <% end %>
</ul>

サムネイル付きの順序付けられていないリストをレンダリングします。そしてそれは大丈夫です-私は画像付きのリストを見ます:

<ul class="thumbnails">
  <li class="thumbnail">
    <img alt="bmw" src="/assets/.../bmw.jpg?1364218949">
  </li>
</ul>

私はそれを次のようにヘルパーに入れたいと思います:

module PhotosHelper
  def photos_thumbs_by_ids(photos_ids)
    content_tag :ul, :class => "thumbnails" do
      Photo.find_all_by_id(photos_ids, limit: 10).each do |p|
        content_tag :li, :class => "thumbnail" do
          image_tag(p.url(:fb))
        end
      end
    end
  end
end

しかし<%= photos_thumbs_by_ids my_params %>、ビューで使用すると、次のようにしかレンダリングされません。

<ul class="thumbnails"></ul>

私は何が間違っているのですか?

4

3 に答える 3

1

あなたのコードを見た後に私が見つけたのはphoto_ids、ヘルパーメソッドを呼び出している間にパラメータを渡していないということです。

<%= photos_thumbs_by_ids(photo_ids) %>

写真を検索するためのIDがないため、ゼロアイテムが返されるため、<li>アイテムは作成されません。

于 2013-03-26T08:37:23.593 に答える
1

次のようにしてみてください。

<%= photos_thumbs_by_ids(photo_ids) %>

def photos_thumbs_by_ids(photos_ids)
    content_tag :ul, :class => "thumbnails" do
      Photo.find_all_by_id(photos_ids, limit: 10).each do |p|
        content_tag :li, :class => "thumbnail" do
          concat(image_tag(p.url(:fb)))
        end
      end
    end
  end
于 2013-03-26T08:38:03.780 に答える
1

問題はそれぞれです:

Photo.find_all_by_id(photos_ids, limit: 10).each do |p|
...
end

文字列ではなく配列を返します。'map'で収集して、参加してみてください

module PhotosHelper
  def photos_thumbs_by_ids(photos_ids)
    content_tag :ul, :class => "thumbnails" do
      Photo.find_all_by_id(photos_ids, limit: 10).map { |p|
        content_tag :li, :class => "thumbnail" do
           image_tag(p.url(:fb))
        end
      }.join.html_safe
    end
  end
end

少なくともレンダリングは便利なメソッドcaptureによって行われるためです。このメソッドは、結果が文字列である場合にのみ出力バッファに入れられ、to_sを試行しません。

于 2013-03-26T08:43:12.697 に答える