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
にコメントしてコメントモジュールをうまく再生できるようにする方法について教えてください。入力用
おかげで、元の質問にコメントを混乱させないために答えとしてこれを投稿
あなたの記事をコードの可読性のために編集しました。なぜあなたは、プロジェクトの外にある添付ファイル>アルバムの階層にネストされたコメントのリソースを明確にしてください。 GET/attachmentsとコメントをする必要がありますか?あなたは、プロジェクト>アルバム>添付ファイルの添付ファイルの下のコメントをリソースに入れようとしましたか? – tomeduarte
@tomeduarteありがとう!それは良い点です。だから私はそれを取り除くでしょう。私はネストされたリソース(私はまだレールで新しいです)のリソースコメントにもっと理にかなっていると思います...私はそれを試みたがエラーが発生します: "ActionView :: Template :: Error(未定義のメソッド' attachment_comments_path 'for# <#:0x103018610>): "新しいリソースパスで上記の質問を更新します。あなたは何を? –
AnApprentice
okスタックオーバーフローは私に編集をさせません、それは痛みです。グループ: リソース:アルバムは リソース:コメント、:only => [:作成、:、破壊]、:制約=> {:context_type => "アルバム"} リソース:添付ファイルが リソースを実行します。コメントは、:だけ=> [:作成、:更新を、:破壊]:制約=> {:context_type => "添付ファイル"} 終了 エンド 終わり、それが動作するようになった – AnApprentice