2012-02-24 8 views
0

<% if current_user.vote_up?(@micropost) == true %>を追加するための未定義のメソッドが現在取得中ですが、ここではマイクロポストコントローラで定義したため、何が原因であるのか不明です。助言がありますか?Rails:current_user.vote_up(@micropost)未定義のメソッド

Micropostコントローラ

def vote_up 
    @micropost = Micropost.find(params[:id]) 
    current_user.vote_exclusively_for(@micropost) 
    current_user.vote_up(@micropost) 
    respond_to do |format| 
     format.html { redirect_to :back } 
     format.js 
     end 
    end 

    def unvote 
    @micropost = Micropost.find(params[:id]) 
    current_user.vote_exclusively_against(@micropost) 
    current_user.unvote(@thred) 
    respond_to do |format| 
     format.html { redirect_to :back } 
     format.js 
     end 
    end 

Micropost HTML

<% if current_user.vote_up?(@micropost) == true %> 
<div class='<%=micropost.id %>'> 
<a href="/microposts/<%=micropost.id %>/vote_up" data-remote='true' class='CounterButton b2'> 
<span id="CounterIcon" class="<%=micropost.id%>"></span> 
</a> 
</div> 
<% else %> 
<div class='<%=micropost.id %>'> 
<a href="/microposts/<%=micropost.id %>/unvote" data-remote='true' class='CounterButton b2'> 
<span id="CounterIcon" class="<%=micropost.id%>"></span> 
</a> 
</div> 
<% end %> 
+0

コントローラのアクションは、モデルのメソッドと何らかの形で同じだと思います(恐れ入りますが)。 – apneadiving

答えて

2

ビューからするつもりのようなコントローラメソッドを直接呼び出すことはできません。

さらに、RailsでMVC分離がどのように機能するかについては少し混乱しているようです。

(ビュー内の)current_user変数は、 "Model"レイヤーに対応しています。そのため、vote_up?はcurrent_userクラスのインスタンスであるメソッドのメソッドにする必要があります。これはmodels/User.rbなどで定義され、ユーザーのインスタンスを照会してブール値を返すだけのvote_up?メソッドが必要です。

これはコントローラのvote_upアクションとは関係ありません。これは価値そのものを返すことはありません:私は実際に "マイクロポスト"を投票することを理解しています。コントローラ内のメソッドは、ユーザーの要求に応じて起動され、データベース(モデルレイヤー)のオブジェクトに何らかの処理を行い、おそらくこれらのモデルオブジェクトの一部を変数に入れ、ユーザーに情報を表示するためのビューを呼び出しますこれらのオブジェクトから取得)。しかし、コントローラ内のメソッドは、ビューから呼び出されることを意味しません。

Micropost HTMLのように== trueを実行すると、慣習的に冗長です。?で終わるメソッドはブール値を返します。

<% if current_user.vote_up?(@micropost) %> 
+0

これを説明してくれてありがとう、私が持っている多くの誤解をクリアします:) – Kellogs

+0

@raodmaster私はこれとここで混乱しています、これらの線に沿っているべきだと思いますが、うまくいきません。私は 'def vote_up? votes.find_by_voter_id(投票可能) end'ユーザーモデルhmm不明 – Kellogs

+0

ユーザーモデルに投票メソッドまたは属性がありますか?あなたの関連が正しく構築されていれば、self.votesを実行してユーザーの投票を得ることができるはずです。これはあなたの特定のプロジェクトに依存しますので、コードを読み、プロジェクトのドキュメントを確認してください。また、不明な点がある場合は、guides.rubyonrails.orgの優れたドキュメントを参照するか、Agile Web Development Rails。 – Roadmaster

関連する問題