Направляющие 3 маршрутизации has_one

У меня есть два класса:

class User < ActiveRecord::Base
  :has_one :foo
end

class Foo < ActiveRecord::Base
  :belongs_to :user 
end

Нечто является дополнительным.

Я создал следующую маршрутизацию:

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"}

Вопросы:

  1. Кажется, что Индексные и Выставочные действия избыточны. Один из них должен быть удален? Если так, который?
  2. : идентификационный параметр в Выставочном действии кажется ненужным, поскольку user_id является внешним ключом в foos таблице и существует только одно нечто на пользователя. Действительно ли я ошибаюсь?
  3. Я хотел бы иметь корректный способ направить к Новому действию, если нет нечто. Одна опция состояла бы в том, чтобы протестировать @user.foo.nil? в Выставочном или Индексном действии FooController затем перенаправьте к Новому действию. Существует ли лучший путь?

Спасибо за внимание.

11
задан craig 27 July 2010 в 17:16
поделиться

1 ответ

Если ваша модель имеет ассоциацию has_one, попробуйте настроить маршрут, используя resource: foo (обратите внимание на единственное имя метода «resource», а не «resources»). Это настроит одноэлементный маршрут ресурса (который, например, не имеет действия индекса, а действия члена не имеют параметра id, поскольку есть только один член). См. Также http://apidock.com/rails/ActionController/Resources/resource (документация 2.3, но также применима к 3.0 afaik).

27
ответ дан 3 December 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: