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>

ユーザーが投稿したビデオをループするのと同じ方法で、ユーザーが投票したビデオを表示する方法について混乱していますか?

4

3 に答える 3

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>
于 2013-10-20T12:12:20.157 に答える
0

レールにはinstance variableandについての概念があります。local variable

@特定の変数がインスタンス変数であり、そのviewsとを介してアクセスできるシンボルで変数を定義するときはいつでもpartials

例: @videos = @user.videos.order("created_at desc").page(params[:page]).per_page(12)

これ@videosはインスタンス変数であり、そのインスタンスをそのスコープ全体で永続化します。

一方、local変数のスコープはそのループ/境界に限定されています。ローカル変数は、ループの実行後に変数が Garbage Collected されるループで使用することをお勧めします。異なる値を格納するために同じ変数名を再度使用できます。

あなたの場合votes、ローカル変数としてビューでアクセスできないため、ビューでこの変数を使用するには、この変数をインスタンス変数として (@votes として) 定義する必要があります。

于 2013-10-20T12:04:52.160 に答える
0

@votes単独ではなく使用する必要がありvotesます。シンボルは@ビューレイヤーと変数を共有するので、それを使って何かをすることができます (ループオーバーなど)。

于 2013-10-20T07:04:38.947 に答える