2012-05-22 4 views
0

나는 Recommendable이라는 David Celis 보석을 사용하여 레일 시스템에 비슷한 시스템을 구현하고 있습니다. 콘솔에서 작업 할 수있는 모든 정보를 얻었지만 적절한 경로를 얻을 수없고 "[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 오류가 어디서 오는지 알 수 없습니다. 미리 감사드립니다.

편집 : 내보기에서

내가 가진 : 당신이 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) 
+0

어떻게 당신이 당신의'like' 행동에 도달하려고합니까? 이 링크/버튼을 만들었습니까? 템플릿의 코드를 보여주세요. – jdoe

답변

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 
+0

안녕하세요 jdoe, 도와 줘서 고마워! 나는 이제 더 가까워지고있다. 어떤 이유로이 트랜잭션이 db에서 수행되지만 내 링크를 클릭 한 후 http : // localhost : 3000/categories/1/posts/1/like에 있으면 리디렉션이 작동하지 않습니다. 이 사이트는 비어 있으므로 오류가 발생하지 않습니다. 이유가 무엇인지 알고 계십니까? rake routes를 실행할 때 다음과 같은 결과를 얻습니다 : show_post /categories/:category_id/posts/:id(.:format) posts # show like_category_post PUT/categories/: category_id/posts/: id/like (.: format) posts like # –

+0

'좋아요'동작의 전체 코드를 게시 했습니까? 그것은 불완전하지 않은 것처럼 보이지 않습니다, 그것은 불완전합니다! – jdoe

+0

예 제 행동이 제 코드입니다. 나는 온라인 어딘가에서 그것을 발견했고 그것은 예를 들어 보석 개발자에 의해 공유되었다. 이것은 처음으로 복잡한 레일 어플리케이션이므로 약간 어려움을 겪고 있습니다. 실종 된 게 뭐라고 생각하니? –

1

귀하의 경로는 PUT 요청을 기대하고있다.

앱은 PUT 요청 (올바른 솔루션)를 발행한다 그래서 :method => :put으로 button_to를 통해 경로에 액세스하는 중 필요하거나 상태를 수정 요청을 할 GET 요청 (잘못된 방법을 사용하도록 경로를 변경합니다) :

 get :like, :on => :member 
+0

하지 마세요! Rails에 관한 모든 책에서 언급 한 모든 것을 망가 뜨 렸습니다 : 상태를 변경하기 위해'사용하지 마라! ** 누가이 미친 가정을 upvoted 호기심이야 ** ** – jdoe

+0

불행히도 이것은 작동하지 않습니다. 내가 대신 넣어 경로를 변경하면 아무 트랜잭션이 DB에서 일어나고있다. 다른 경우에는, 내보기에 내가 추가 : 방법 => : 나는 오류 "잘못된 번호 (0에 대한 1)"를 넣어. 도와 줘서 고마워! –

+0

@jdoe가 말했듯이 경로 변경 솔루션을 사용하면 안됩니다. 이를 수정하는 올바른 방법은 앱이 PUT 요청을 발행하도록하는 것입니다. – meagar