0

Ruby on Rails に Thumb_Up gem を使用しています。 https://github.com/brady8/thumbs_up

ユーザーが投稿に投票できるようにしたい。ただし、ユーザーが各投稿の横にあるボタンをクリックしてデータベースに投票できるようにする方法がわかりません。

Railsコンソールでこれを実現するには、次のようにします。

u=User.first

m=Micropost.first

u.vote_for(m)

ただし、ビューでボタンをクリックしたときにこれを実現するにはどうすればよいですか。私は ajax を使用する必要があると想定していますが、このアクションを実行するために投稿する必要がある URL をどのように知ることができますか?

どんな助けでも大歓迎です。

アップデート:

助けてくれてどうもありがとう!私はまだ以下のコードに問題があります。

ここに私のroutes.rbがあります

resources :microposts do
  post :vote, :on => :member
end

意見:

<%= link_to('vote for this post!', vote_micropost_path(@micropost), :method => :post) %>

コントローラ:

def vote
    @micropost = Micropost.find(params[:id])
  current_user.vote_for @micropost

  # This assumes you'll only call it via AJAX.
  # If your ajax call doesn't return "ok", then you know something went wrong
  render :text => 'ok', :layout => false
end

ただし、まだこのエラーが発生します: ルートが一致しません {:controller=>"microposts", :id=>#, :action=>"vote"}

ルートが正しく一致しない理由を誰かが知っていますか?

4

1 に答える 1

1

Rails 3 を想定しています。Rails 2 のルートは少し異なります。

まず、config/routes.rb ファイルでルートを定義する必要があります。これは多くの方法で行うことができます。マイクロポストのルートがすでにある場合は、単純に「投票」アクションを追加できます。

    resources :microposts do
      post :vote, :on => :member
    end

(明確にするために、上記の「投稿」は HTTP POST メソッドを指し、Micropost クラスとは何の関係もありません。) そのルートを使用する場合は、それをキャッチするために Microposts コントローラーで「投票」メソッドを作成する必要があります。 . 何かのようなもの

    def vote
      @post = Micropost.find(params[:id])
      current_user.vote_for @post

      # This assumes you'll only call it via AJAX.
      # If your ajax call doesn't return "ok", then you know something went wrong
      render :text => 'ok', :layout => false
    end

次に、ビューの AJAX POST 呼び出しで (私が示したルート例を想定して)、次の URL を取得します。

    vote_micropost_path(@micropost)

/microposts/56/vote のようになります

于 2011-04-11T22:28:57.360 に答える