Ruby on rails 如何为嵌套资源生成适当的“url”?

Ruby on rails 如何为嵌套资源生成适当的“url”?,ruby-on-rails,ruby,ruby-on-rails-3,routing,named-routing,Ruby On Rails,Ruby,Ruby On Rails 3,Routing,Named Routing,我使用的是RubyonRails3.2.2,我想为嵌套资源的url生成一个合适的url\u。就是我有: # 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

我使用的是RubyonRails3.2.2,我想为嵌套资源的url生成一个合适的
url\u。就是我有:

# 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
然后我得到以下错误:

NoMethodError
undefined method `article_articles_user_association_path' for #<#<Class:0x000...>
url\u for
方法按预期工作,并生成url
/articles/1/user\u associations/1

注意:在这种情况下,生成的命名路由类似于
article\u articles\u user\u association
article\u articles\u user\u association
编辑\u article\u articles\u user\u association

然而,我认为在后者/工作案例中构建/命名路由器的方式并不“好”。因此,是否有可能以某种方式使
url\u for
方法通过生成像
article\u user\u association
(而不是像
article\u articles\u user\u association
)这样的命名路由来工作?


我阅读了与
ActionDispatch::Routing::UrlFor
方法相关的部分(特别是“为命名路由生成URL”部分),但我找不到解决方案。也许有一种方法可以“告诉”Rails使用一个特定的命名路由器,就像您想用
self.primary\u key
语句更改表的主键列一样

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

  ...
end
#app/models/articles/user_association.rb
class Articles::UserAssociation
您的
用户关联
模型位于
文章
命名空间中,该命名空间包含在命名路由中:

# 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 Articles::UserAssociation文章\用户\关联
#嵌套路由=>article\u articles\u user\u关联
如果删除名称空间,您将获得正在查找的路由帮助器:

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

#        route =>           user_association
# nested route =>   article_user_association
#app/models/articles/user_association.rb
类UserAssociation用户\用户关联
#嵌套路由=>article\u user\u关联

除非您有很好的理由将
UserAssociation
保留在名称空间中,否则不要这样做

我想知道是否有命名冲突与“协会”不知何故。。。这似乎让人想起了在某处看到的“model_associations”。@DGM-我不知道,但我认为这是一个常见的问题,很多人都会犯错。不,我错过了名称空间的事情。我知道如果我删除名称空间,我会得到我正在寻找的route helper,但原因是我有很多模型,为了让它们保持一种简单的“方式”,我将它们定位/存储在
app/models
目录下的子目录中,因此我必须为它们命名名称空间。
# 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