2016-05-25 6 views
2

私は現在のユーザーが好きな投稿をすべて表示しようとしています。ユーザーが好きなすべての投稿を表示するには

私はRuby on Railsを使用しており、Deviseと "Acts As Votable"を使用しています。私はthe Acts As Votable guideに従っていますが、動作させることはできません。

私はこれが移動するための方法だと思う:

@post.liked_by @user1 
@post.downvote_from @user2 

私はダッシュボードと呼ばれる新しいコントローラを作成:

class DashboardController < ApplicationController 
    def index 
     @post = Post.all.liked_by current_user 
    end 
end 

をしかし、私は自分のWebを実行したときに私が手:

undefined method `liked_by' for #<Post::ActiveRecord_Relation:0x9aa89b0> 

どうすればいいですか?

答えて

2

問題は、モデルオブジェクトではなくActiveRecord関係で呼び出すことです。マイナーな変更がいくつかあります。あなたはすべて設定されます。

まず、我々はそれが複数のレコードを受けていますことを示すために、インスタンス変数の複数の(ユーザーが複数の投稿が好きなことができます)行います。これらを処理するために、次に

class DashboardController < ApplicationController 
    def index 
    @posts = Post.all.liked_by current_user 
    end 
end 

を、あなたは個々に移動したいと思いますレコードまたはレコード。あなたは全体のリストを処理したい場合は、この操作を行うことができます。これは、などを適用し、ポストのすべてにdownvoteます

@posts.each do |post| 
    post.liked_by @user1 
    post.downvote_from @user2 
end 

:あなたはすでにあなたが(多分UIで選択されたベース)に投票したかったものをポスト知っていたならば、あなたはこれを行うことが

post = @posts.first 
post.liked_by @user1 
post.downvote_from @user2 

:しかし、あなたはこのようなだけの最初の投稿を、更新することができます

@post = Post.find_by(params[:id]) 
@post.liked_by @user1 
@post.downvote_from @user2 

複数の名前と異なる名前を区別しないようにすることで、Railsの規則に従うことができ、コレクションや個々のオブジェクトで作業しているときに簡単に識別できます。

+0

私の答えはうまくいかないのですか?私の宝石はすでにこの機能(私の答えごとに)を満たすと思うが、私はこれを自分でテストしていない。もし私が正しいとすれば、それを行う方がはるかに良い方法でしょう。 – Andy

+0

@Andy OPが質問するのが難しかった。私の答えの最初の文で指摘されているエラーは、彼が意図したモデルオブジェクトではなく、コレクションに対してモデルメソッド( 'acts_as_votable'によって提供された' liked_by')を使用しようとしていることです。これは文字列を含む配列に対して 'String#gsub'を使うようなものです。メソッドが間違ったオブジェクトで使われています。あなたの答えは、おそらくいくつかの*他の*質問には正しいが、*この*質問には関係していない。投票したアイテムの設定と取得の方法を説明していますが、これはOPが尋ねている問題ではありません。 –

+0

"現在のユーザーが好きな投稿をすべて表示しようとしています。"これは、彼がデータベースから" current_user "によって"好きだった "すべての投稿を検索しようとしているように聞こえます。なぜ彼があなたの答えを最良のものとして選んだのかが分かりません。私の答えは「うまくいく」と答えていますが、私たちの答えは全く異なる2つのことをしています。 – Andy

2

お使いのコントローラに@posts = current_user.find_up_voted_itemsを試し、ユーザモデルにacts_as_voterを入れてください。

+0

これも機能します。あまりにもありがとうございます。 –

+0

@EzequielRamiroもしこれがうまくいくなら、確かにそれは他の答えより優れていますか? 'current_user'が好きだったすべての投稿を表示したいと思う - これはそれを実現します。あなたが選んだ「最善の答え」は、投稿を好きにする方法を説明しています。私が言うことができる限り、それは元の質問であなたが求めたものとは全く異なるものです。 – Andy

関連する問題