2012-04-11 10 views
0

私はさまざまなモデルのオブジェクトである様々なActiveRecordオブジェクトの配列を持っています。 team_path doesntのが原因いただきまし論理的に存在していること各ネストされたressourceへのリンク

array.each do |element| 
    link_to element.name, element 
end 

は、それがエラーをスローします。私はこのようなarray.eachでこれを使用するときに

resources :departments do 
    resources :teams 
end 

:そのうちの一つは、DepartmentのネストされたressourceあるTeamと呼ばれ、入れ子にされたリソースのルートはdepartment_team_pathと呼ばれていますが、このeachの中の他のモデルのObjetsも扱うため、このメソッドを絶対に呼び出すことはできません。

私が見ている一つの可能​​性は、team_pathという名前のルートを追加することです。これはチーム#ショーを参照していますが、それはかなりではなく、SEOにとっても悪いことではありません。 1つのコースでこのモデルや他のモデルにリンクする可能性はありますか? Rails Guidesあたりとして link_to element.name, url_for(element)

答えて

0

私はこの問題に対処する独自の方法を書いています。

array.each do |element| 
    link_to element.name, nested_object(element) 
end 

それが今の私のためにかなり良い作品、...

1

はこれを試してみてください。また、resources :departments, :shallow => trueを使用することもできますが、前述のようにSEOにとって望ましくない結果をもたらすでしょう。

+0

いや、このdoesntの仕事、まだ同じエラー – davidb

+0

:彼らは、だから私は、次の操作を行うことができますApplicationHeler

def nested_name(object) routes = Rails.application.routes.named_routes.to_a name = nil routes.each do |r| name = r[0].to_s if r[1].requirements[:controller] == object.class.to_s.downcase.pluralize && r[1].requirements[:action] == "show" end name end def nested_object(object) name = nested_name(object) parent = name.gsub("_", "").gsub(object.class.to_s.downcase, "") if object.class.reflect_on_association(parent.to_sym) return [object.send(parent), object] else return object end end 

に位置していますこれを試してみてください(それが助けてくれたら教えてください):http://lostechies.com/joshuaflanagan/2012/03/27/a-smarter-rails-url_for-helper/ – ramigg

+0

それは私に影響を与えましたが、すべての情報が利用可能で、私はポストのようにセカンドタイムを書き留めたくありません。 – davidb

1
array.each do |element| 
    if element.is_a?(Team) 
    link_to element.name, url_for([element.department, element]) 
    else 
    link_to element.name, element 
    end 
end 

+0

この特定のケースでは動作するが、ジェネラリストでは動作しません。私は今自分の方法を書きました...それはすぐに投稿します – davidb

関連する問題