5

Rails 3.1アプリで、事前にわからない(ポリモーフィックテーブルからの)変数クラスのオブジェクトの束を一覧表示したいと思います。link_to名前付きルートを持つリソースの場合は、そのルートを呼び出しに使用したいと思います。そのようなルートが存在するかどうかをチェックせずに素朴なアプローチ(HAMLを許してください):

%ul
- @objects.each do |object|
  %li= link_to object, url_for(object)

オブジェクトが名前付きルートを持たないundefined method 'foo_path'クラスのインスタンスである場合(たとえば、リソースとして定義されていないため) 、これによりエラーが発生します。Fooオブジェクトまたはクラスの名前付きルートの存在を判別する簡単な方法(単純なメソッド呼び出しなど)はありますか?

編集:

私が取得したいのは次のようなものです:

%ul
- @objects.each do |object|
  %li= link_to_if object.has_route?, object, url_for(object)
4

2 に答える 2

4

名前付きルートのないモデルオブジェクトを生成したり、エラーメッセージを出力したりしたくない場合は、link_to呼び出しにレスキューを追加するだけです。

%ul
- @objects.each do |object|
  %li= (link_to(object, url_for(object)) rescue "no link")

お役に立てれば。

于 2012-06-19T09:05:17.010 に答える
3

まったく同じ問題を見てください。同じ理由で私は救助が好きではありません。考えている

respond_to?(object.class.name.underscore + "_path")

これは、ネスト、サブドメイン、およびSTIに応じて変更する必要があります。たとえば、私の目的のために私は持っています:

respond_to?("ops_media_file_#{asset.class.base_class.name.underscore}_path")

それはかなりうまくいくようです。

于 2016-02-17T22:19:21.187 に答える