컨트롤러 작업을위한 경로 추가
-
13-12-2019 - |
문제
나는 추천 가능한 David Celis Gem을 사용하여 Rails 앱에서 Like 시스템을 구현하고 있습니다.나는 콘솔에서 일하기 위해 모든 것을 얻었지만 올바른 경로를 얻을 수없고 "No Route match가 [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'
.
누군가가 내 오류를 가리킬 수 있습니까?나는 일을 할 수 있지만 사용자가 특정 게시물을 좋아할 때 오류가 발생하는 경우 오류가 발생하면 오류가 발생하면 POST로 다시 재전송하려고 할 때 오류가 어디에서 왔는지 알지 못합니다.미리 감사드립니다.
편집 :
내 뷰에서는 다음과 같습니다.
- 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)
. 해결책
교체 :
= 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
. 다른 팁
경로는 PUT
요청을 발행하는 동안 GET
요청을 기대합니다.
앱이 PUT 요청 (올바른 솔루션)을 발행하거나 button_to
요청을 사용하도록 경로를 변경하도록 :method => :put
를 통해 GET
를 통해 경로에 액세스해야합니다.:
get :like, :on => :member
. 제휴하지 않습니다 StackOverflow