私はまだRailsで自分のストライプを稼いでいて、何か助けを必要とする問題に遭遇しました。私は、ユーザーがコメントできるさまざまなモデル(ストーリー、写真、アートワークなど)とコメントそのものを持つアプリケーションを構築しています。私は機能している機能の98〜99%を持っていますが、コメントが作成された後にリダイレクトが最上位の親(ストーリー、写真など)にリダイレクトされるのを止めています。Rails 3再帰的多態性コメントモデル、最上位の親にリダイレクトする方法
私のコメントモデルは次のようになります。
# /app/models/comment.rb
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
has_many :comments, :as => :commentable
end
...私は例えばユーザーがコメントすることができ、いくつかのモデル、物語のモデルがあります:
# /app/models/story.rb
class Story < ActiveRecord::Base
has_many :comments, :as => :commentable
end
を私のコメントコントローラは次のようになりますこの時点で:
# /app/controllers/comments_controller.rb
class CommentsController < ApplicationController
def index
@commentable = find_commentable
@comments = @commentable.comments
end
def new
@commentable = find_commentable
end
def create
@commentable = find_commentable
@comment = @commentable.comments.build(params[:comment])
if @comment.save
redirect_to :back
else
render :action => 'new'
end
end
protected
def find_commentable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
end
...もちろん私のルートは次のようになります。
# /config/routes.rb
resources :comments do
resources :comments
end
resources :stories do
resources :comments
end
私は変更する必要がある特定の行がredirect_to :back
ライン(など他のすべて、多型、コメントの再帰は、正常に動作します)です。現在のコードは、ユーザーがストーリーにコメントしているときに意図したとおりに機能しますが、その機能のフォームがストーリーの「表示」ページにないため、ユーザーがコメントにコメントしているときには理想的ではありません。
私は何をやろうとしているのですか(また、解決策があると思われるもの)は、親オブジェクトを見つけてそのオブジェクトがコメントであるときに再帰するメソッドです。これまでの私のこれまでの試みはまったくきれいではなかったし、まだ動作するプロトタイプを手に入れたことはない。
は、私は私のコードの大部分をベースに、この railscasts episodeを使用しますが、それはおそらく何かがと間違っている(コメントを構築しようとしたときredirect_to :id => nil
は何とかと呼ばれる作成コメント方法として私のために動作しませんし、それが
NilClass error
になり私のルーティングは、私はインデックスアクションがどのようにcreateと呼ばれるのか分かりません)。
だから私は間違っているのですか?これを実現するにはここで何をする必要がありますか?私は私が99%そこにいるように感じるが、その最後の1%は私を夢中にさせている。私はこれを数回を読んでする必要がありました
確かに、これは間違いなくソリューションの一部です。私は、コメントが(潜在的に)一連の他のコメントの下に入れ子になっているときに再帰でこれを行う必要があります。 – Ryan