2012-03-01 12 views
1

多型関連を使用しています。多型関連エラー

は、私がコメントモデルとhas_many協会はポリモーフィックな関連を使用して持っている2件の機種の記事やイベントがあり

インサイドコメントコントローラ:私が書いた

def index 

    @commentable = find_commentable 

    @comments = @commentable.comments 

end 

def find_commentable 

    params.each do |name, value| 

    if name =~ /(.+)_id$/ 

     return $1.classify.constantize.find(value) 

    end 

    end 

    nil 

end 

内の記事やイベントモデル:

has_many :comments, :as => :commentable,:dependent => :destroy 

コメントの中のモデル:

belongs_to :commentable, :polymorphic => true 

内部ルート:

resources :articles do 
resources :comments 

end 

私の問題は

1である)私はhttp://localhost:3003/articles/8/commentsを入力すると、それは次のエラーを与える:

undefined method `comments' for nil:NilClass 

2)また、私は、ネストされたルートを使用したくありません、私は単純なルートを使いたいです。このコードが行っているのと同じことをどのように達成できますか?

答えて

0
  1. @commentableがnilであるため、このエラーが発生します。 IDが8の記事がありますか? find_commentable関数がcommentableを正しく返していますか?私の推測は、これらの2つの質問のうちの1つに対する答えは「いいえ」です。

  2. ネストしたルートが必要ない場合は、resources :commentsを実行するだけですが、commentable_typeとcommentable_idをparamsとしてコントローラに渡すようにしてください。それ以外の場合は、そのコメントを得るためにコメント可能なクラスを参照することはできません。

+0

ID 8との記事があります....私はfind_commentable機能が正しくcommentable戻っていないと思います...しかし、私は1つのより多くの疑問を持って、温家宝私はコメントはそれがfind_commentableし、その後indexアクションに行き、リンクをクリックしますこの関数が実行されると、paramsとnameの内部に入る値、この行の値params.each do | name、value |その関数の内部 – Nikita