У меня есть два класса:
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 излишни. Должен ли один из них быть удален? Если да, то какой?
- Параметр: id в действии Show кажется ненужным, так как user_id является внешним ключом в таблице foos, и для пользователя есть только один foo. Я ошибаюсь?
- Я хотел бы иметь изящный способ маршрутизации на новое действие, если нет foo. Один из вариантов - проверить @user.foo.nil? в действии FooController Show или Index, затем перенаправляйтесь к новому действию. Есть ли лучший способ?
Спасибо за ваше время.