私は現在、thumbs_up を使用して好き嫌いのレール アプリを実装しようとしています。このページの指示に従いました: Rails 3 で "thumbs_up" 投票ジェムを使用する方法の説明
ユーザーは、本に「いいね!」または「いいね!」を付けることができます。私は 2 つのボタンがあり、好きなボタンとそうでないボタンがあり、ユーザーの現在の好きなステータスに応じて、どちらか一方をユーザーから隠したいと考えています。したがって、if else は次のように適切であると考えました。
<% if @user.voted_on?(@book) %>
<div class="unlike_button"><%= link_to("Unlike", unvote_book_path(book), method: :post) %></div>
<% else %>
<div class="like_button"><%= link_to("Like", vote_up_book_path(book), method: :post) %></div>
<% end %>
そして私のroute.rbファイルで:
resources :books do
member do
post :vote_up
post :unvote
end
end
しかし、これを実行すると、次のエラー メッセージが表示されます。
未定義のメソッド `voted_on?' nil:NilClass の場合
私が間違っているかもしれないことはありますか?
アップデート
Mischa が提案したように、current_user.voted_on に変更しました。今、私はこのエラーメッセージを受け取ります:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
以下は私の Books コントローラーのスニペットです
include UsersHelper
include SessionsHelper
before_filter :signed_in_user, only: [:index]
before_filter :admin_user, only: :destroy
def index
array = Book.search(params[:search])
@books = Kaminari.paginate_array(array).page(params[:page]).per(5)
end
def show
@book = Book.find(params[:id])
#respond_to do |format|
#format.js
#end
end
def destroy
Book.find(params[:id]).destroy
flash[:success] = "Book deleted."
redirect_to books_url
end
def vote_up
begin
current_user.vote_for(@book = Book.find(params[:id]))
flash[:success] = "Liked!."
redirect_to books_url
end
end
def unvote
begin
current_user.unvote_for(@book = Book.find(params[:id]))
flash[:success] = "Unliked!."
redirect_to books_url
end
end