自定义Rails中的每个循环

时间:2014-03-03 22:24:33

标签: ruby-on-rails ruby loops ruby-on-rails-4

  • ruby​​ 2.0.0p247
  • Rails 4.0.0

如何替换循环的html内容?

- @recipes.each do |recipe|
    = image_tag "path.png", :height => "?", :width => "?"

Fox示例:

预期输出如下:

image_tag "medium-01.png", :height => "200", :width => "350"

image_tag "small-02.png", :height => "183", :width => "285"
image_tag "small03.png", :height => "183", :width => "285"
image_tag "small-04.png", :height => "183", :width => "285"
image_tag "small-05.png", :height => "183", :width => "285"

image_tag "medium-06.png", :height => "200", :width => "350"
image_tag "medium-07.png", :height => "200", :width => "350"

image_tag "small-08.png", :height => "183", :width => "285"
image_tag "small-09.png", :height => "183", :width => "285"

结果如下:

enter image description here

在jquery中我做到了这一点。也许有帮助:

$("div").each(function(i, element) {
    if (i % 5 == 0 || i % 6 == 0) {
        $(this).css({"background":"dark_gray_color"});
    }
    else {
        $(this).css({"background":"magenta_color"});
    }
});

我清楚了吗?

2 个答案:

答案 0 :(得分:3)

使用ruby的Enumerable#each_with_index来获得类似于你发布的jquery的循环。

@recipes.each_with_index do |recipe, i|
  if [0,5,6].include? i
    h, w = 200, 350
  else
    h, w = 183, 285
  end

  image_tag "path.png", :height => "#{h}", :width => "#{w}"
end

答案 1 :(得分:0)

此代码应该获得您想要的输出。我不确定HAML是否正确(未经测试)。

- @recipes.each.with_index do |recipe, i|
  - if [i, i % 5, i % 6].any?(&:zero?)
      = image_tag "medium-#{'%02d' % (i + 1)}.png", :height => "200", :width => "350"
  - else
      = image_tag "small-#{'%02d' % (i + 1)}.png", :height => "183", :width => "285"
  - end