I tienen dos clases:Rails 3 has_one enrutamiento
class User < ActiveRecord::Base
:has_one :foo
end
class Foo < ActiveRecord::Base
:belongs_to :user
end
El foo es opcional.
creé la siguiente ruta:
resources :users do
resources :foo
end
que se traduce en las siguientes rutas:
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"}
Preguntas:
- Parece que el indexar y mostrar acciones son redundantes. ¿Debería uno eliminarse? ¿Si es así, Cuál?
- El parámetro id en la acción Mostrar parece innecesario, ya que user_id es una clave externa en la tabla de foos y solo hay un foo por usuario. ¿Estoy equivocado?
- Me gustaría tener una manera elegante de encaminarme a la acción nueva si no hay un foo. Una opción sería probar @ user.foo.nil? en la acción Show o Index de FooController, luego redirija a la acción Nueva. ¿Hay una mejor manera?
Gracias por su tiempo.
No puedo creer que me haya perdido eso. – craig
Gracias por la información –