Ruby on rails:需要帮助将两个不同循环和两个不同部分的视图格式化为一个视图

时间:2013-04-02 15:50:44

标签: ruby-on-rails ruby-on-rails-3 model-view-controller

以下是我的两个部分

中的两个循环

循环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是数组,大小不同。

2 个答案:

答案 0 :(得分: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我想我理解你,我认为最好的方法是将两个集合统一到一个集合中,并且只有一个集合。你说两个集合都来自不同的表(模型),所以你只能在1 get_product的模型中创建一个名为p的方法,这样你可以做的就是选择如果你得到product1product2

现在,您可以统一两个集合,但不能简单地执行@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

答案 1 :(得分: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%>

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