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