0

以下是我在两个部分中的两个循环

循环 1 和部分 1

<%@loop1.map do |p| %> 
<li>
    <%= image_tag p.product.image.url, :size=>"400x250"%>
    <br \>
    <p><%=p.product.text%></p>
    <div class="pull-right">From: <u><%=p.product.user%></u></div>
    <%end%>
</li>
<%end%>

循环 2 和部分 2

<%@loop2.map do |p| %> 
<li>
    <%= image_tag p.product2.image.url, :size=>"400x250"%>
    <br \>
    <p><%=p.product2.text%></p>
    <div class="pull-right">From: <u><%=p.product2.user%></u></div>
    <%end%>
</li>
<%end%>

现在,由于我在 index.html.erb 文件上使用 ajax,我将下面的两个 div 替换为上面呈现的数据

<div class="loop1_results"></div>
<div class="loop2_results"></div>

所以现在发生的事情是set of loop1 results先来后到set of loop2 results。我想要做的是交替显示的顺序。所以它会显示 loop1 块,然后是 loop2 块,依此类推。

我该怎么做 ?

任何建议或帮助表示赞赏。如果这可以通过一个部分来完成,我该怎么做?

更新: Loop1 和 loop2 是数组,大小不同。

4

2 回答 2

1

如果您使用 Ajax,您可能有一个 .js.erb(或带有 Coffee);在 Javascript 文件中,您可以选择加载数据的位置,例如,您可能有:

$(".loop1_results").html("<%= render :partial => @partial1 %>");
$(".loop2_results").html("<%= render :partial => @partial2 %>");

在动作中,您可以使用“随机”功能选择名称保存@partial1@partial2

还!我忘了你有不同的属性,你可以传递额外的变量来指定你需要哪个变量,或者你可以在集合之间创建通用方法来获取数据

更新

psharma 你有以下代码:

$("div. loop1_results").append("<%= escape_javascript (render :partial => 'loop1') %>");
$("div. loop1_results").append("<%= escape_javascript (render :partial => 'loop2') %>");

现在,代替渲染“loop1”和“loop2”,您将使用我之前展示的变量@partial1 和@partial2;此变量将包含“loop1”和“loop2”,但您保存在这些变量中的值将由“随机”函数选择,例如(这是一个虚拟示例,请更好地理解这个):

if (rand()*10).to_i%2 == 0
   @partial1 = 'loop1'
   @partial2 = 'loop2'
else
   @partial1 = 'loop2'
   @partial2 = 'loop1'
end

更新#2

psharma 我想我理解你,我认为最好的方法是将两个集合统一为一个集合,并且只有一个部分。你说这两个集合都来自不同的表(模型),所以为了只有一个部分你可以做的是创建一个get_product在模型内部调用的方法p,在这里选择如果你得到product1or product2

现在,您可以统一这两个集合,但不能简单地做@loop1 + @loop2; 你可以做的是这样的(我还没有测试过,也请让这个更好,呵呵):

@data = []
total = @loop1.count + @loop2.count - 1
for i in 0..total
  if (i%2 == 0 || @loop2.empty?) && !@loop1.empty?
      @data << @loop1.pop
  elsif !@loop2.empty?
      @data << @loop2.pop 
  end
end
于 2013-04-02T16:28:53.557 回答
1

假设@loop1@loop2大小相同,您可以使用以下代码解决给定问题:

<% (0..@loop1.size - 1).each do |i| %>

<% p = @loop1[i] %>
<li>
    <%= image_tag p.product.image.url, :size=>"400x250"%>
    <br \>
    <p><%=p.product.text%></p>
    <div class="pull-right">From: <u><%=p.product.user%></u></div>
    <%end%>
</li>

<% p = @loop2[i] %>
<li>
    <%= image_tag p.product2.image.url, :size=>"400x250"%>
    <br \>
    <p><%=p.product2.text%></p>
    <div class="pull-right">From: <u><%=p.product2.user%></u></div>
    <%end%>
</li>

<%end%>

在不了解您的数据结构的情况下,我无法为您提供更清洁的解决方案。

于 2013-04-02T16:34:29.833 回答