我有两节课:
class User < ActiveRecord::Base
:has_one :foo
end
class Foo < ActiveRecord::Base
:belongs_to :user
end
Foo 是可选的。
我创建了以下路由:
resources :users do
resources :foo
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"}
问题:
- 似乎 Index 和 Show 操作是多余的。应该删除其中一个吗?如果有,是哪一个?
- Show 操作中的 :id 参数似乎没有必要,因为 user_id 是 foos 表中的外键,每个用户只有一个 foo。我弄错了吗?
- 如果没有 foo,我希望有一种优雅的方式来路由到 New 操作。一种选择是测试@user.foo.nil?在 FooController 的 Show 或 Index 操作中,然后重定向到 New 操作。有没有更好的办法?
谢谢你的时间。