2011-04-29 19 views
0

私の最初のRailsアプリケーションとして、ユーザーが投稿に投票できるシンプルなブログアプリケーションをまとめようとしています。私はBlogpost足場を生成し、投票数を記録するための整数列( "upvote"と題されている)を持っていました。定義済みのメソッドへのリンクを作成しますか?

link_to "Vote up" self.voteup 

しかしこのdoesnの:ブログ投稿のインデックスビューで

def self.voteup 
    blogpost.upvote += 1 
end 

は、私のような何かをするリンクを作成したいと思います: Blogpostモデルで

は、私は、関数を作成しましたうまくいきません。メソッドへのリンクを作成することは可能ですか?そうでない場合は、これを達成するための正しい方向で私を指摘できますか?

+0

をreason'され、あなたのインデックスページで

def upvote_blog blogpost = Blogpost.find(params[:id]) blogpost.upvote += 1 blogpost.save redirect_to blogpost_path end 

:あなたはこのようなブログ記事のコントローラ内のメソッドを作成することができますか? – rubyprince

+0

実際に間違い!それはblogpost.upvoteであるはずだった。 – Alec

答えて

1

を見てみることができますアプリ。メソッドへのリダイレクトはコントローラジョブであり、コントローラメソッドへのリンクのみを与えることができます。 `モデルのコードに何を

<% @blogposts.each do |blogpost| %> 
    ... 
    <%= link_to "Vote up", :action => upvote_blog, :id => blogpost.id %> 
    ... 
<% end %> 
1

Modelメソッドをviewのlink_toにマップすることはできません。コントローラでアクションを作成してModelメソッドにアクセスし、actionがCRUD以外のアクションでもlink_toを使用してマップすると、route.rbで同じもののルートを定義する必要があります。

3

しようとしていることMVCの設計原則に反します。コントローラーのアクションの中でupvotingを行うべきです。おそらく、upvoteというコントローラー・アクションを作成するべきです。それにポストIDを渡してください。コントローラーの動作の中で、渡されたIDでポストを取得し、アップポートすることができます。

あなたがレールに深刻な議決が必要な場合は、私はあなたがblogspotsテーブルにupvote列をインクリメントする必要があることを前提としていthese gems

関連する問題