4

url_forRuby on Rails 3.2.2 を使用しており、ネストされたリソースの適切な URL を生成したいと考えています。つまり、私は持っています:

# config/routes.rb
resources :articles do
  resources :user_associations
end

# app/models/article.rb
class Article < ActiveRecord::Base
  ...
end

# app/models/articles/user_association.rb
class Articles::UserAssociation < ActiveRecord::Base
  ...
end

: 生成された名前付きルートは、、、、のようなものarticle_user_associationsです。article_user_associationedit_article_user_association

私の見解では、次を使用します。

url_for([@article, @article_association])

次に、次のエラーが表示されます。

NoMethodError
undefined method `article_articles_user_association_path' for #<#<Class:0x000...>

ただし、ルーターをこのように述べると

# config/routes.rb
resources :articles do
  resources :user_associations, :as => :articles_user_associations
end

メソッドはurl_for期待どおりに機能し、たとえば URL を生成します/articles/1/user_associations/1

: この場合、生成された名前付きルートはarticle_articles_user_associationsarticle_articles_user_associationedit_article_articles_user_association、 ...のようになります。

ただし、ルーターの構築方法/後者/作業ケースでの名前付け方法は「良い」ものではないと思います。では、のような名前付きルートを生成することにより、何らかの方法でメソッドを機能させることは可能ですか?url_forarticle_user_associationarticle_articles_user_association


メソッドに関連する公式ドキュメント(特に「名前付きルートの URL 生成」セクション)を読みましたActionDispatch::Routing::UrlFor が、解決策が見つかりません。self.primary_keyおそらく、ステートメントでテーブルの主キー列を変更したいときに、特定の名前付きルーターを使用するようにRailsに「言う」方法があるかもしれません...

# app/models/articles/user_association.rb
class Articles::UserAssociation < ActiveRecord::Base
  # self.primary_key = 'a_column_name'
  self.named_router = 'user_association'

  ...
end
4

1 に答える 1

2

モデルUserAssociationArticles名前空間にあり、名前付きルートに含まれます。

# app/models/articles/user_association.rb
class Articles::UserAssociation < ActiveRecord::Base
  ...
end

#        route =>           articles_user_association
# nested route =>   article_articles_user_association

名前空間を削除すると、探しているルート ヘルパーが得られます。

# app/models/articles/user_association.rb
class UserAssociation < ActiveRecord::Base
  ...
end

#        route =>           user_association
# nested route =>   article_user_association

UserAssociation名前空間に保持する本当に正当な理由がない限り、そうしないでください。

于 2012-06-06T05:07:07.633 に答える