синглтон ресурс и контроллеры в рельсах 3 - PullRequest
0 голосов
/ 05 мая 2011

Я пытаюсь настроить одноэлементный ресурс, и, возможно, я выпил слишком много кофе. Вот сделка. Все соответствующие строительные леса были созданы, и у меня есть это в файле маршрутов:

resources :users do
  resource :hat
end

... в зависимости от пользователя has_one: шляпа и шляпа принадлежит_ пользователю:

Запустил рейковые маршруты и может видеть все правильные маршруты RESTful, но когда я иду, например, / users / 2 / hat, контроллер скрывается и говорит мне, что не может найти шапку без ID. У меня сложилось впечатление, что одноэлементный ресурс по своей природе отрицает необходимость идентификатора в поисковике, поскольку он является единым ресурсом.

Есть идеи или это кофе?

1 Ответ

2 голосов
/ 05 мая 2011

Ну, у вас есть два варианта. Если вы действительно думаете, что: шляпа заслуживает отдельного ресурса (и просто наличие отношения «принадлежат к» не подразумевает этого), то я просто надеюсь, что вы не забыли о создании HatController.

На второй руке вы можете быть просто счастливы с дополнительным маршрутом участника:

  resources :users do
    match :hat, :via => [:get, :post], :on => :member
  end

В этом случае вам нужно действие "шляпа" в UsersController.

Немного больше вашего кода будет полезно.

EDIT

Я только что проверил это сам, и предположение правильно, и это работает:

>curl http://localhost:3000/users/1/hat
<!DOCTYPE html>
<html>
<head>
  <title>Utest</title>
  <link href="/stylesheets/scaffold.css?1304678667" media="screen" rel="stylesheet" type="text/css" />
  <script src="/javascripts/prototype.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/effects.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/dragdrop.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/controls.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/rails.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/application.js?1304678590" type="text/javascript"></script>
  <meta name="csrf-param" content="authenticity_token"/>
<meta name="csrf-token" content="6RvaQqHxYGFih2vh+3UmHJnqYPfVh/dqdpkLwva6Yko="/>
</head>
<body>

HatController#Show

<a href="/users/1/hat">Self</a>

</body>
</html>

В моем случае мне просто пришлось форсировать единственную форму для контроллера, но это, вероятно, моя ошибка где-то:

  resources :users do 
    resource :hat, :controller => :hat
  end
...