В Ruby on Rails параметр: id является необязательным только в routs.rb? Как сказать необязательный против необязательного? - PullRequest
2 голосов
/ 11 июня 2010

В маршрутах .rb

  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'

, но тогда

http://localhost:3000/foobars/alt

тоже будет работать.Параметры:

{"action"=>"alt", "controller"=>"foobars"} 

, поэтому похоже, что :id здесь необязательно.Как вы можете сказать, что это необязательно, а не необязательно?Можете ли вы сделать так, чтобы это не было необязательным в rout.rb?

Ответы [ 3 ]

1 голос
/ 08 июля 2010

Вы можете использовать: требования для наложения некоторых условий на: id для сопоставляемого маршрута, т.е. 4} /}. Таким образом, если: id не соответствует требованию, маршрут также не будет соответствовать.

0 голосов
/ 12 июня 2010

http://localhost:3000/foobars/alt

Чтобы пройти по этому пути, вы должны упомянуть этот маршрут в rout.rb.

что-то вроде следующего

map.resources :foobars, :collection=> {:alt=>:get }

в противном случае он будет обрабатывать alt как params [: id], и если вы создадите контроллер с помощью scaffolding, он перейдет к действию show вашего foobars контроллера.

So for above mention url it becomes optional and treat it as an action insetad of params[:id]
0 голосов
/ 11 июня 2010

В контроллере вы должны просто выдать ошибку, если params[:id] равно nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...