Как отобразить несколько image_tag внутри итерации в помощнике - PullRequest
0 голосов
/ 24 ноября 2010

Я пытаюсь создать помощника для отображения рейтинга звезд на основе атрибута модели.

У меня есть следующее:

  def show_profile_stars(profile)
    content_tag :span, :class => 'stars' do
      profile.stars.times do
        image_tag("stars.gif", :size => "30x30", :class => "gold")
      end
    end
  end

'stars' - целочисленное поле.

Но это не рендеринг тегов изображения, а просто буквальное отображение номера «звездочки».

Если я поместил просто image_tag без блока итерации, он покажет изображение, проблема в том, чтоитерация.

Полагаю, я что-то упускаю из-за методов, которые получают блоки (я все еще новичок в RoR).

Любая помощь?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

Используйте помощник concat:

def show_profile_stars(profile)
  content_tag :span, :class => 'stars' do
    profile.stars.times do
      concat(image_tag("stars.gif", :size => "30x30", :class => "gold"))
    end

    nil
  end
end

Вам также необходимо вернуть nil в конце content_tag, чтобы он не выводил stars.

1 голос
/ 24 ноября 2010

Две вещи, разве это не будет сделано в CSS с использованием класса на промежутке (например, одна звезда, две звезды и т. Д.)?

В любом случае, чтобы действительно сделать то, что вы хотите сделать, попробуйте:

stars = []
profile.stars.times { stars << image_tag("stars.gif", :size => "30x30", :class => "gold") }
content_tag :span, stars.join("\n").html_safe, :class => "stars"
...