Ruby on rails 带有索引的每个_工作不正常

Ruby on rails 带有索引的每个_工作不正常,ruby-on-rails,iterator,ruby-on-rails-3.2,each,carousel,Ruby On Rails,Iterator,Ruby On Rails 3.2,Each,Carousel,我正在使用旋转木马来显示图像。我已将图像上传到云中。但不知何故,它是在自我重复。 这是我的密码 div id="myCarousel" class="carousel slide"> <div class="carousell-inner"> <% @img.each_with_index do |i|%> <% if i.gallery == "Art"%> <div class="active item">

我正在使用旋转木马来显示图像。我已将图像上传到云中。但不知何故,它是在自我重复。 这是我的密码

div id="myCarousel" class="carousel slide">
<div class="carousell-inner">
    <% @img.each_with_index do |i|%>
    <% if i.gallery == "Art"%>
        <div class="active item">
            <%= image_tag (i.image.url) %>
        </div>

        <% i.next%> <!-- For incrementing the i value but it is not working-->
        <div class="item">
            <%= image_tag (i.image.url)%>   
        </div>
    <%end%> 
    <%end%>
    </div>
</div>
div id=“myCarousel”class=“carousel slide”>

我想要的是在
活动项中
它应该显示图像数组的第一个url,并且在非活动项(之后将处于活动状态)中应该有其他图像。它不应该重复图像。在这里,由于
i
的值没有改变,因此它正在重复图像

我开始明白你想要什么:) 如果要分离数据,可以使逻辑非常简单

<div id="myCarousel" class="carousel slide">
    <div class="carousell-inner">
    <% @img.keep_if{|i| i.gallery == "Art"}.each do |i|%>
        <div class="active item">
            <%= image_tag (i.image.url) %>
        </div>
    <%end%>

    <% @img.keep_if{|i| i.gallery != "Art"}.each do |i|%>
        <div class="item">
            <%= image_tag (i.image.url)%>   
        </div>
    <%end%>
    </div>
</div>


最好是在控制器中准备数据,而不是在视图中。

我通过手动操作找到了答案。首先,在控制器中,我通过此代码找到了属于
美术馆的所有图像

 @image = Image.find_all_by_gallery("Art")
现在要显示数组的第一个元素
@image
,我们可以简单地使用
@image.first
,然后我们可以在carousel的活动项中调用数组的第一个元素。然后对于
部分,需要了解的基本情况是,如果我们直接调用并显示数组的所有元素,那么数组的第一个元素也将显示在该部分中。因此,重复可能发生。为了避免这种情况,我们可以这样做:

i = @image.count
@image[1..i]
这样第一个元素就不会在旋转木马的“项目”部分重复。
希望它能帮助别人。谢谢你给我时间

我最初认为您需要
每个带有索引的图像,但实际上,您只对
艺术
图库中的图像感兴趣,不知道第一个图像是否真的是
艺术
图像,因此我尝试如下:

<div id="myCarousel" class="carousel slide">
  <div class="carousell-inner">
    <% art_images_counter = 0 %>
    <% @img.each do |image|%>
      <% if image.gallery == "Art" %>
        <% if art_images_counter == 0 %>
          <div class="active item">
            <%= image_tag (image.image.url) %>
          </div>
        <% else %>
          <div class="item">
            <%= image_tag (image.image.url)%>   
          </div>
        <% end %>
        <% art_images_counter += 1 %>
      <%end%> 
    <%end%>
  </div>
</div>


希望这能有所帮助。

尽量精简代码<代码>每个带有索引的\u
肯定工作正常。该错误一定是在您使用它时出现的。但是,由于所有这些无关的噪音,很难看到。
您的零件
完成了修剪@文卡特:什么是给J的?j将具有相同的值。我想答案还是一样的。请参见编辑。我正在重新表述我想要的内容。您是否知道
每个带索引的\u
为块提供了两个参数?对象和索引。您正在尝试增加对象???仅仅调用对象
i
并不能使其成为计数器。实际上,您的代码告诉我们,显示所有属于美术馆的图像都应该显示在活动部分。因此,它将再次以类似堆栈的模式显示所有图像。顺便说一句,你知道旋转木马是如何工作的吗?在项目的div中,它应该增加i的值,这样当活动部分移动到另一个项目时,它将显示另一个图像。它不是那样的。。!!!这就像是从表
图像
中搜索属于图库
艺术
的图像一样<代码>库
是图像表的一个属性。因此,在我看来,我创建了一个新的视图页面,在其中显示属于
Art
gallery的图像。对于所有的画廊也是如此。我假设你知道推特引导的旋转木马的工作原理。因此,
类活动项
用于显示数组中的第一个元素。在我的情况下,属于美术馆的第一张图像将显示在
类活动项中。无论如何,我没有发现我上面写的代码有任何错误。所以你可以从中理解。我的答案是:循环所有图像,将第一个图像放置在旋转木马的第一个项目中,将所有其他项目放置在另一个项目中。所以我觉得这应该行得通。你试过这个吗?