我正在使用Ruby on Rails 3.2.2,並且想爲嵌套資源生成適當的url_for
URL。也就是說,我有:如何生成適當的`url_for`嵌套資源?
# 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_association
,edit_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_associations
,article_articles_user_association
,edit_article_articles_user_association
,...
不過,我想是不是「好」的路由器方式建造/在命名後者/工作案例。因此,是否有可能以某種方式使url_for
方法生成命名路線,如article_user_association
(而不是像article_articles_user_association
)?
我讀到有關ActionDispatch::Routing::UrlFor
方法Official Documentation(特別是「URL生成名爲路徑」一節),但我不能找到一個解決方案。也許有一種方法可以「說」到Rails的,喜歡它讓當你想用self.primary_key
語句更改表的主鍵列使用特定的命名路由器...
# app/models/articles/user_association.rb
class Articles::UserAssociation < ActiveRecord::Base
# self.primary_key = 'a_column_name'
self.named_router = 'user_association'
...
end
我想知道是否有與「關聯」的命名衝突莫名其妙...它似乎打了一個在某處看到「model_associations」的記憶。 – DGM
@DGM - 我不知道,但我認爲這是一個很常見的問題,很多人都會摔倒。 – Backo
不行,我錯過了命名空間的事情。 – DGM