2

title:string と rating:integer を持つ単純な投稿モデルがあり、投稿を評価する機能を追加したいと考えています。これまでのところ、

#Post controller   
def increase
 @post = Post.find(params[:id])
 @post.increment! :rating
 flash[:notice] = "Thanks for your rating."
 redirect_to @post
end

#Post show
<%= link_to "Rating", increase_post_path %>

#Routes
map.resources :posts, :member => { :increase => :put }

評価をクリックすると、不明なアクションが発生します。@post.increment をつけると評価が上がります!:rating を更新しますが、独自のメソッドを作成するときはそうではありません。何か提案はありますか?

4

3 に答える 3

4

あなたが言う標準的なルートを持っているなら

map.resources :posts

次のものに置き換える必要があります。

map.resources :posts, :member => { :increase => :put }

これにより、アプリのメソッド「put」を使用してルート「increase_post_path」が作成されます。

于 2010-01-23T09:01:46.820 に答える
1

誰かが興味を持っているなら、これが私の解決策です。助けてくれてありがとう。

#Views
<%= link_to post.rating, increase_post_path(post) %>

#Controller
def increase
  @post = Post.find(params[:id]).increment!(:rating)
  flash[:notice] = "Thanks for rating"
  redirect_to posts_url
end

#Routes
map.resources :posts, :member => { :increase => :put }

これは、自分だけのもの、悪用されないものが必要な場合に機能します。明らかに、他の人が無制限に投票できるあなたのウェブサイトに評価を追加することは、単にトラブルを求めているだけです.

Votefuを使用することをお勧めします、評価を行い、ユーザーのカルマさえあります。著者は、サンプルアプリを作成するのに十分親切でした.

于 2010-01-23T10:02:52.380 に答える
1

アクションをファイルに追加する必要がありroutes.rbます。詳細については、この優れたガイドを参照してください。

于 2010-01-23T08:48:26.597 に答える