Routing Rails 3有一个路由
我有两门课:Routing Rails 3有一个路由,routing,ruby-on-rails-3,has-one,Routing,Ruby On Rails 3,Has One,我有两门课: class User < ActiveRecord::Base :has_one :foo end class Foo < ActiveRecord::Base :belongs_to :user end 这将导致以下路线: GET /users/:user_id/foo(.:format) {:controller=>"foos", :action=>"index"} user_foos POST /use
class User < ActiveRecord::Base
:has_one :foo
end
class Foo < ActiveRecord::Base
:belongs_to :user
end
这将导致以下路线:
GET /users/:user_id/foo(.:format) {:controller=>"foos", :action=>"index"}
user_foos POST /users/:user_id/foo(.:format) {:controller=>"foos", :action=>"create"}
new_user_foo GET /users/:user_id/foo/new(.:format) {:controller=>"foos", :action=>"new"}
GET /users/:user_id/foo/:id(.:format) {:controller=>"foos", :action=>"show"}
PUT /users/:user_id/foo/:id(.:format) {:controller=>"foos", :action=>"update"}
user_foo DELETE /users/:user_id/foo/:id(.:format) {:controller=>"foos", :action=>"destroy"}
edit_user_foo GET /users/:user_id/foo/:id/edit(.:format) {:controller=>"foos", :action=>"edit"}
问题:
谢谢您的时间。如果您的模型有一个has\u one关联,请尝试使用
资源:foo
设置路由(请注意单数方法名称“resource”,而不是“resources”)。这将设置单例资源路由(例如,没有索引操作,成员操作没有id参数,因为只有一个成员)。另请参见(2.3文档,但也适用于3.0以及afaik)。我可以理解为什么Craig实际上忽略了这一点。这是如此微妙的差别,我甚至没有想到。唯一让我感到意外的是,我为单例资源命名的路由有一个奇怪的索引名:user\u foo\u index
,而不是user\u foos
这是一个非常聪明的推论,因为Rails没有复数
警告:以下示例使用浅嵌套,方法如下:
resources :cats, shallow: true do
resources :noms
end
或者:
resources :cats do
shallow do
resources :noms
end
end
无论如何,回到正题,如果你设置了一个单一的资源-地址
,而不是文章
,你会看到这样的情况:
user_address_index GET | POST
new_user_address GET
edit_address GET
address GET | PUT | DELETE
然后,正如Andreas公正地指出的,您可能在路线中错误地声明了这一点:
resources :users do
resources :address
end
如果您将其更改为:
resources :users do
resource :address
end
如果在提示中按一下rake routes
,您应该会很好,很高兴看到这样的情况:
user_address POST | GET | PUT | DELETE
new_user_address GET
edit_user_address GET
注意:我知道rakes routes的输出看起来并不完全像这样(更详细),我只是为了集中精力而简化
希望能有帮助。真不敢相信我错过了。
user_address POST | GET | PUT | DELETE
new_user_address GET
edit_user_address GET