2013-10-20 21 views
1

我有一个页面显示他发布的用户视频,并在同一页面上显示他已投票的用户视频。同一个展示页面上的多个循环

这里是我的控制器

class UsersController < ApplicationController 
def show 
    @user = User.find(params[:id]) 
    @videos = @user.videos.order("created_at desc").page(params[:page]).per_page(12) 
    votes = @user.videos_with_votes("created_at desc").page(params[:page]).per_page(12) 
end 
end 

这是我对我的节目页面视图

<div id="videos"> 
    <% @videos.each do |video| %> 
    <div class="box"> 
    <%= image_tag video.image.url(:threeacross) %> 
    <%= video.title %> 
     <%= video.description %> 
    <%= video.user_id %> 
    <%= link_to 'Show', video %> 
    <%= link_to 'Edit', edit_video_path(video) %> 
    </div> 
    <% end %> 
</div> 

我如何显示该用户已经以同样的方式表决的视频上混淆起来,我正在循环播放用户视频?

回答

0

使用实例变量,例如

class UsersController < ApplicationController 
def show 
    @user = User.find(params[:id]) 
    @videos = @user.videos.order("created_at desc").page(params[:page]).per_page(12) 
    @voted_videos = @user.videos_with_votes("created_at desc").page(params[:page]).per_page(12) 
end 
end 

<div id="voted_videos"> 
    <% @voted_videos.each do |video| %> 
    <div class="box"> 
     <%= image_tag video.image.url(:threeacross) %> 
     <%= video.title %> 
     <%= video.description %> 
     <%= video.user_id %> 
     <%= link_to 'Show', video %> 
     <%= link_to 'Edit', edit_video_path(video) %> 
    </div> 
    <% end %> 
</div> 

如果视频的显示和视频投票是一样的比你可以看一下,使这个代码:

<div class="box"> 
     <%= image_tag video.image.url(:threeacross) %> 
     <%= video.title %> 
     <%= video.description %> 
     <%= video.user_id %> 
     <%= link_to 'Show', video %> 
     <%= link_to 'Edit', edit_video_path(video) %> 
    </div> 

的部分叫_videos.html.erb,可同时用于@videos@voted_videos。 将此文件(使用上面的代码)存储在与其他视图文件相同的目录中。

例如,

<div id="voted_videos"> 
    <% @videos.each do |video| %> 
    <% render "videos" %> 
    <% end %> 
</div> 


<div id="voted_videos"> 
    <% @voted_videos.each do |video| %> 
    <% render "videos" %> 
    <% end %> 
</div> 
+0

哇。多么好的解释。这对于知道并像魅力一样工作是非常有用的。谢谢! – Josh

+0

当然:)随时upvote和/或接受。谢谢。 –

0

您需要自己使用@votes而不是votes@符号与视图层共享变量,以便您可以对其执行操作(例如循环)。

0

在轨道中有关于instance variablelocal variable的概念。

每当您使用@这个符号定义一个变量时,该变量就是一个实例变量,并且可以通过它的viewspartials进行访问。

为例如:@videos = @ user.videos.order( “created_at DESC”)页(PARAMS [:页])。。per_page(12)

@videos这里是一个实例变量和仍然存在其实例在其范围内。

local变量的范围仅限于其循环/边界。局部变量最好在循环中使用,在循环执行后,变量将被垃圾收集,并且我们可以再次使用相同的变量名称来存储不同的值。

对于您的情况,votes在您的视图中无法作为其局部变量访问,因此要在视图中使用此变量,您需要将此变量定义为实例变量(如@votes)。

相关问题