11

私は、Rails 3 アプリにthumbs_up投票ジェムを実装しようとしていますが、実際の実装に関する指示は明確ではありません。gem を要求した後 [ gem 'thumbs_up' ] 、適切な移行を作成して実行した後 [ rails generate thumbs_up && rake db:migrate ] README では次のように説明されています。

モデルに投票するには、次のようにします:
*簡略構文
vote_for(voteable) # +1票を追加しますvoter.vote_against(voteable) #
-1票を追加し
ますvoter.vote(voteable, vote) # 追加します+1 または -1 のいずれかの投票: 投票 => 真 (+1)、投票 => 偽 (-1

)
voter.vote_exclusively_against(voteable) # その特定の有権者による以前の投票をすべて削除し、反対票を投じます。*

README の例での 'voter' と 'voteable' の使用は、アプリ内のオブジェクトの代用であると想定してきましたが、使用法はまだわかりません。

私のビュー、コントローラー、および routes.rb ファイルがどのように見えるかの文字通りの例は、非常に役立ちます。私はこれを理解しようと何日も費やしました!

私のアプリでは、投稿に投票するユーザーがいます。これには、EventsLinksの 2 つのタイプがあります。投稿は<%= render :partial => @posts %>を使用して呼び出され、個々の投稿はそのビューとして " _event.html.erb " または " _link.html.erb " を使用します - それがイベントかリンクかによって異なります。

4

3 に答える 3

24

少しでもお役に立てれば幸いです。

ジェネレーターによって Vote モデルが作成されているはずです。これはすべての投票を保持するモデルですが、上記の方法を介して間接的に対話します。

だから、あなたのために:

class User < ActiveRecord::Base
  acts_as_voter
end

class Post < ActiveRecord::Base
  acts_as_voteable
end

これにより、各モデルでthumbs_up メソッドをセットアップできます。

次に、たとえば、Web サイトの「上向き矢印」からリンクされている PostsController にコントローラー アクションがある場合、その投稿に対するそのユーザーの投票を作成できます。

このようなビュー:

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

そして、このようなroutes.rb:

resources :posts do
  member do
    post :vote_up
  end
end

そして最後に、コントローラーで:

class PostsController < ApplicationController
  def vote_up
    begin
      current_user.vote_for(@post = Post.find(params[:id]))
      render :nothing => true, :status => 200
    rescue ActiveRecord::RecordInvalid
      render :nothing => true, :status => 404
    end
  end
end
于 2011-02-10T22:05:24.807 に答える
1

ルーティング エラー

{:action=>"vote_up", :controller=>"microposts", :id=>nil} に一致するルートはありません

これは私が使用しているリンクであり、ルーティングが正しく指定されていない場所であると想定しています。rake ルートを実行したところ、vote_up_micropost というルートがあります。他に調べるべきことはありますか。ありがとうございました

ここに私が追加したリンクがあります

<%= link_to('vote for this post!',
    vote_up_micropost_path(@microposts),
    :method => :post) %>
于 2013-02-15T14:58:44.580 に答える
0

これは、ブレイディの答えの続きです。

Brady の見解には次のコードがありました

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

彼が意味するのは.. link_to はデフォルトで:method => 'get'& を使用しているので、彼は post を使用してレコードを更新したかったので、get を使用していないので、:method => 'post'

ボタンはデフォルトで:method => :post

したがって、ルートは

resources :posts do
  member do
    post :vote_up
  end
end

ここでpost :vote_upメンバー内にありmethod => :post、ポストコントローラーではありません

しかし、このようなもの link_toなしで使用することに決めた場合:method => :post

<%= link_to('vote for this post!', vote_up_post_path(@post)) %>

次に、ルーティングは

resources :posts do
   member do
      get :vote_up
   end
end

お役に立てれば!

于 2012-03-14T08:17:28.600 に答える