2013-10-20 28 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)。

相關問題