Маршруты в Ruby и link_to, custom: проблема маршрута действий - PullRequest
1 голос
/ 28 июня 2010

Я пытаюсь получить эту ссылку:

<%= link_to('Edit', :action => 'manage', :id => user) %>

даже пытался явно <% = link_to ('Edit', {: controller => 'users',: action => 'manage',: id => user},: method =>: get)%>

чтобы показать ссылку в HTML как

 '/users/manage/1' or '/users/1/manage'

но он отображается как

'/users/manage?id=1'

Я вижу по своим маршрутам:

manage_users GET    /users/manage(.:format)            {:action=>"manage", :controller=>"users"}
...
edit_user GET    /users/:id/edit(.:format)          {:action=>"edit", :controller=>"users"}

поэтому я добавил map.connect , но он был добавлен к пользователям

users    GET    /users/manage/:id(.:format)        {:action=>"manage", :controller=>"users"}

но безуспешно. Ссылка все еще '/ users / manage? Id = 1'

Это не работает больше, чем выше.

GET    /users/:id/manage(.:format)        {:action=>"manage", :controller=>"users"}

Теперь, когда я помещаю действие: в link_to, чтобы «редактировать», т.е.

<%= link_to('Edit', :action => 'edit', :id => user) %>

rout.rb edit_user GET /users/:id/edit/(.:format) работает, со ссылкой, показывающей

'/users/1/edit'

Как мне заставить мою ссылку для показа той же ссылки, когда она «управлять» вместо «редактировать», то есть отображать ссылку «пользователи / 1 / управление» вместо ' / пользователей / управлять? ID = 1' ??? Это потому, что мой map.connect добавлен к пользователям , когда его нужно добавить к manage_users * ?

Спасибо за помощь. Я буду пытаться понять это.

Мир.

Кстати, / users / manage? Id = 1 работает, я просто хочу, чтобы щелкала нужная ссылка для перезаписи.

РЕДАКТИРОВАТЬ rout.rb

map.resources :users, :collection => {:manage => :get}

#map.manage_user '/users/:id/manage', :controller => :users, :action => :manage
#map.resources :users, :member => { :manage  => :get } 
#map.connect 'users/manage/:id(.:format)', :controller => 'users', :action => 'manage',  :conditions => { :method => :get }

map.resources :categories
map.resources :posts
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

Ответы [ 2 ]

1 голос
/ 28 июня 2010

поэтому я добавил map.connect, но он был добавлен для пользователей
Я подозреваю, что вы добавили map.connect после других определений, что дало бы ему самый низкий приоритет.Попробуйте поместить его в начало файла rout.rb.

Вы также можете использовать именованные маршруты, чтобы избежать путаницы:

map.manage_user '/users/:id/manage', :controller => :users, :action => :manage

и затем ссылаться на него как

link_to 'Manage', manage_user_path(:id => user)

edit
Если это не сработает, пожалуйста, покажите ваш файл rout.rb.

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

Вы должны изменить collection на member в вашем маршруте .rb при определении map.resources :users.Тогда вы получите красивую /users/1/manage ссылку.

Также, при создании ссылки попробуйте это:

<%= link_to 'Manage', manage_user_path(user) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...