2011-01-25 2 views
1
class CommentsController < ApplicationController 

    def create 

    @commentable= context_object() 
    @comment = @commentable.comments.build(params[:comment].merge(:user_id => current_user.id)) 

    if @comment.save 
     respond_to do |format| 
     format.js 
     end 
    else 
     render :action => 'new' 
    end 
    end 

    private 

    def context_object 
    params[:constraint][:context_type].singularize.classify.constantize.find(context_id) 
    end 

    def context_id 
    params["#{ params[:constraint][:context_type].singularize }_id"] 
    end 

end 

このコメントモジュールは私にはうまくいきましたが、おそらくネストされたリソースを使用しているため、今朝はヒッチに遭遇しました。Rails 3 - コメントモジュールのサポート

/projects/3/albums/6/attachments/84 

私はそのページにコメントすると、私はエラーを取得:

resources :projects do 
    resources : albums do 
    resources :attachments 
    end 
end 

resources :attachments do 
    resources :comments, :only => [:create, :update,:destroy], 
       :constraint => {:context_type => "conversations"} 
end 

任意のアイデア:

ActiveRecord::RecordNotFound (Couldn't find Project without an ID): 
    app/controllers/comments_controller.rb:102:in `context_object' 
    app/controllers/comments_controller.rb:14:in `create' 

マイroutesファイルは次のようになります基本的に、私は今のようなURLを持っていますproject>Album>Attachmentにコメントしてコメントモジュールをうまく再生できるようにする方法について教えてください。入力用

おかげで、元の質問にコメントを混乱させないために答えとしてこれを投稿

+1

あなたの記事をコードの可読性のために編集しました。なぜあなたは、プロジェクトの外にある添付ファイル>アルバムの階層にネストされたコメントのリソースを明確にしてください。 GET/attachmentsとコメントをする必要がありますか?あなたは、プロジェクト>アルバム>添付ファイルの添付ファイルの下のコメントをリソースに入れようとしましたか? – tomeduarte

+0

@tomeduarteありがとう!それは良い点です。だから私はそれを取り除くでしょう。私はネストされたリソース(私はまだレールで新しいです)のリソースコメントにもっと理にかなっていると思います...私はそれを試みたがエラーが発生します: "ActionView :: Template :: Error(未定義のメソッド' attachment_comments_path 'for# <#:0x103018610>): "新しいリソースパスで上記の質問を更新します。あなたは何を? – AnApprentice

+0

okスタックオーバーフローは私に編集をさせません、それは痛みです。グループ: リソース:アルバムは リソース:コメント、:only => [:作成、:、破壊]、:制約=> {:context_type => "アルバム"} リソース:添付ファイルが リソースを実行します。コメントは、:だけ=> [:作成、:更新を、:破壊]:制約=> {:context_type => "添付ファイル"} 終了 エンド 終わり、それが動作するようになった – AnApprentice

答えて

0

あなたは/attachments経由で利用できる添付ファイルを維持する必要がないため - 2番目のリソースが無駄にブロックすること、このような何か:あなたのルートヘルパー(_pathと_url)を変更するために起こっているの

resources :projects do 
    resources :albums do 
    resources :attachments do 
     resources :comments, :only => [:create, :update,:destroy], 
          :constraint => {:context_type => "conversations"} 
    end 
    end 
end 

をあなたの新しいヘルパーを反映させるためにあなたのコントローラーとビューを見て変更してください。

具体的には、attachment_comments_pathproject_album_attachment_comments_pathとなります。

rake routesをコンソールで実行すると、それらのモデルの完全なルートリストを表示できます。また、Rails routing guideを詳しく見ることをおすすめします。