0

Recommendableと呼ばれるDavid Celis gemを使用して、Railsアプリに同様のシステムを実装しています。コンソールですべてが機能するようになりましたが、正しいルートを取得できず、「[GET] に一致するルートがありません」「/categories/1/posts/1/like」というエラーが表示されます。

私のモデルには次のものがあります。

class Category < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
  extend FriendlyId
  friendly_id :name, use: :slugged
end

class Post < ActiveRecord::Base
  belongs_to :category
end

私のポストコントローラーには次のものがあります。

class PostsController < ApplicationController
  before_filter :authenticate_user!
  before_filter :get_category
  def like
    @post = Post.find(params[:id])
    respond_to do |format|
      if current_user.like @post
      else
         flash[:error] = "Something went wrong! Please try again."
         redirect_to show_post_path(@category, @post)
      end
    end
  end
end

私のルートには次のものがあります:

resources :categories do
    resources :posts do
      put :like, :on => :member
    end
end
match 'categories/:category_id/posts/:id', :to => 'posts#show', :as => 'show_post'

誰かが私のエラーを指摘できますか? PUT を機能させることはできますが、ユーザーが特定の投稿を気に入ったときにエラーが発生した場合に投稿にリダイレクトしようとしているときに、GET エラーがどこから来ているのかわかりません。前もって感謝します。

編集:

私の見解では:

- title "#{@post.class}"
%p#notice= notice

%p
  %b Title:
  = @post.title
%p
  %b Description:
  = @post.description
%p
  %b Likes:
  = @post.liked_by.count

= link_to 'Edit', edit_category_post_path(@post)
\|
= link_to 'Back', category_posts_path
\|
= link_to 'Like', like_category_post_path(@post)
4

2 に答える 2

1

PUTリクエストを発行している間、ルートはリクエストを予期していますGET

アプリがPUTリクエストを発行するようにbutton_towithを介してルートにアクセスするか(正しい解決策)、リクエストを使用するようにルートを変更する必要があります(状態を変更するリクエストを行う間違った方法)。:method => :putGET

      get :like, :on => :member
于 2012-05-22T15:48:28.860 に答える
1

交換:

= link_to 'Like', like_category_post_path(@post)

と:

= link_to 'Like', like_category_post_path(@category, @post), method: :put

または、私が好きなように:

= link_to 'Like', [@category, @post], method: :put

私はあなたlikeがしなければならないと思います:

def like
  @post = Post.find(params[:id])
  respond_to do |format|
    format.html do
      if current_user.like @post
        flash[:notice] = "It's ok, you liked it!"
        redirect_to :back
      else
         flash[:error] = "Something went wrong! Please try again."
         redirect_to show_post_path(@category, @post)
      end
    end
  end
end
于 2012-05-22T16:06:16.507 に答える