2012-01-10 8 views
1

私はforemをthumbs_upと統合しようとしています。私はforem Postモデルとコントローラを継承しました。ここでルーティング問題のレール3.1 thums_upとforem

は私のコントローラである: - :ここで

module Forem 
    class PostsController < Forem::ApplicationController 
    before_filter :authenticate_forem_user 
    before_filter :find_topic 
    . 
    . 
    . 
    . 
private 

    def find_topic 
     @topic = Forem::Topic.find(params[:topic_id]) 
    end 
    end 
end 

私のルートである: - -

ここ
mount Forem::Engine, :at => "/forums" 

resources :posts do 
    member do 
    post :vote_up 
    end 
end 

ここ

class PostsController < Forem::PostsController 
    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 

はForemのポストコントローラがどのように見えるかです私の見解です: -

これは私が取得していますエラーです: -

のActiveRecord :: RecordNotFound PostsControllerの番号のvote_upで

IDなしForem ::トピックを見つけることができませんでした

何問題になる可能性がありますか?コマンドプロンプト、 で

+0

「current_user.vote_for」はどのように見えますか? –

+0

@muistooshort current_user.vote_forはどのように見えるのですか?vote_forはthumbs_up gemによって提供されます –

+0

'current_user.vote_for'のように見えますが、' Forem :: Topic.find'をIDなしで呼び出すと、エラーメッセージがあなたに伝えているようですが、何も表示されませんそれが原因かもしれないので、私は 'vote_for'がなぜそれをしてはならないことをしているのだろうと思っています。 –

答えて

1

あなたの問題は、フィルタの前にある:

module Forem 
    class PostsController < Forem::ApplicationController 
    #... 
    before_filter :find_topic 
    #... 
    def find_topic 
     @topic = Forem::Topic.find(params[:topic_id]) 
    end 

、その後:

class PostsController < Forem::PostsController 
    def vote_up 
    #... 

だからfind_topicvote_up前に呼び出されますが、vote_upためのルートが:topic_idを持っていません。何:topic_idfind_topicは、このことになるだろうことを意味しません:

@topic = Forem::Topic.find(nil) 

をし、あなたのエラーはどこから来ているのです。 Forem::ApplicationControllerから継承していない別のコントローラクラスへ

  1. 移動vote_up

    3つのオプションが頭に浮かぶ。

  2. skip_filter :find_topic, :only => :vote_upをPostsControllerに追加します。
  3. ルートとリンクを調整して、ルート内で:topic_idを取得します。

upvotingが@topicは、その後、(1)または(2)に働くだろう、そうでなければ、と(3)に行く必要があります必要がない場合。

+0

私はオプション3を先に進める方法を知らず、オプション1と2を試しましたが、それはうまくいかないようです。私はforemのアーキテクチャはフォーラム - >トピック - >任意のアイデアを投稿すると思うので@topicが必要になると思いますか? –

+0

@Dev:トピックと投稿の間に関連はありますか?もし存在すれば 'params'からではなく' @ post'から '@ topic'を得ることができます。 –

+0

これはhas_manyという関連:posts、:dependent:>:destroy、:order => "created_at ASC" –

0

チェックrake routesとidをポストする必要があります確認してください。vote_upまたはGET:vote_up -

ror_masterとコントローラでdebuggerを使用! と書いてparamsがあるかもしれません。

+0

私はあなたが 'get:vote_up' をルートに使用するべきだと思います。確認して確認してください。 –

+0

あなたはポストの代わりに次を意味します:vote_up get:vote_upを使うべきですか? –