2010-10-07 2 views
1

У меня есть модель сообщений с столбцами id и title.Как указать, что именованный маршрут должен использовать столбцы модели для своих функций _url и _path?

Я получил свой маршрут (рельсы 2.3.8), установленные следующим образом:

map.post ':title/:id', :controller => 'posts', :action => 'show' 

, который корректно работает при распознавании URL, и при создании их явно, как в

post_url(:title => 'foo', :id => 123) 

который хорошо выглядит как/foo/123. Я бы хотел позвонить по телефону

p = Post.create!(:title => 'foo') # let's assume it gets ID 123 
url_for(p) 

и получить тот же путь. Но я получаю сообщение об ошибке:

post_url failed to generate from {:action=>"show", :controller=>"posts", 
    :title=>#<Post id: 123 title: "foo" created_at: ... 

Как указать, что названный маршрут должен использовать столбцы модели, в ее _url и _path функцию?

ответ

0

Когда вы объявляете маршрут, то, как вы его вызываете, требуется определенное количество параметров, и они должны быть указаны в правильном порядке или вещи могут запутаться.

Вот некоторые типичные маршруты:

map.none '/', :controller => 'none', :action => 'index' 
map.one '/:one_id', :controller => 'one', :action => 'show' 
map.two '/:one_id/:two_id', :controller => 'two', :action => 'show' 
map.three '/:one_id/:two_id/:three_id', :controller => 'three', :action => 'show' 

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

none_path 
one_path(one) 
two_path(one, two) 
three_path(one, two, three) 

Вы можете включить дополнительные параметры в конце. Как правило, это плохая идея, чтобы смешивать и сочетать автоматическую маршрутизацию и ручные методы маршрутизации: параметры

# Using named routes 
one_path(one) # /one/1 
one_path(one, :two_id => two) # /one/1?two_id=2 
one_path(:one_id => one) # Awkward format for same 

# Using automatic routing 
url_for(:controller => 'one', :action => 'show', :one_id => one) # /one/1 

Пути в скобках, как (:format) не являются обязательными, но они лучше избегать, кроме случаев, когда имеются безопасные значения по умолчанию.

Возможно, вы отключили метод url_for, включив в свой маршрут два параметра, а не просто :id.

Смежные вопросы