我有一个页面显示他发布的用户视频,并且在同一页面上显示了他投票的用户视频。
这是我的控制器
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 :(得分:0)
您需要使用@votes
代替votes
。 @
符号与视图层共享变量,以便您可以使用它(例如循环遍历它)。
答案 1 :(得分:0)
在rails中有一个关于instance variable
和local variable
的概念。
每当您使用@
符号定义变量时,特定变量是一个实例变量,并且可以通过其views
和partials
访问。
例如:@videos = @ user.videos.order(“created_at desc”)。page(params [:page])。per_page(12)
此处@videos
是一个实例变量,并在其范围内保留其实例。
而local
变量的范围仅限于其循环/边界。局部变量最好用在循环中,其中循环执行后变量是Garbage Collected,我们可以再次使用相同的变量名来存储不同的值。
在您的情况下,votes
在您的视图中无法作为局部变量访问,因此要在视图中使用此变量,您需要将此变量定义为实例变量(如@votes)。
答案 2 :(得分: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
。
将此文件(包含上述代码)存储在与其他视图文件相同的目录中
e.g。
<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>