Rails 3: именованные параметры маршрутов break link_to - PullRequest
0 голосов
/ 05 августа 2011

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

scope ":group/:subgroup/" do
devise_for :users
    resources :users
end

"Rake Routes", а затем получит следующее:

       users GET    /:group/:subgroup/users(.:format)             {:action=>"index", :controller=>"users"}
             POST   /:group/:subgroup/users(.:format)             {:action=>"create", :controller=>"users"}
    new_user GET    /:group/:subgroup/users/new(.:format)         {:action=>"new", :controller=>"users"}
   edit_user GET    /:group/:subgroup/users/:id/edit(.:format)    {:action=>"edit", :controller=>"users"}
        user GET    /:group/:subgroup/users/:id(.:format)         {:action=>"show", :controller=>"users"}
             PUT    /:group/:subgroup/users/:id(.:format)         {:action=>"update", :controller=>"users"}
             DELETE /:group/:subgroup/users/:id(.:format)         {:action=>"destroy", :controller=>"users"}

Это работает отлично - кроме случаев, когда яиспользовать link_to:

link_to current_user.name, current_user

Затем выдает эту ошибку

ActionController::RoutingError in Users#index 
Showing C:/Rails/MyApp/app/views/users/_my_list.html.haml where line #8 raised: 
No route matches {:action=>"show", :controller=>"users", :group=>#<User id: 7, email: "username@domain.com", encrypted_password: "$2a$10$GdZeC0b4VaNxdsDXP...", password_salt: "$2a$sj$88gm0nttYE.7a4IHi.BNO", reset_password_token: nil, remember_token: nil, remember_created_at: nil, sign_in_count: 86, current_sign_in_at: "2011-08-05 17:18:19", last_sign_in_at: "2011-08-05 00:14:26", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", confirmation_token: nil, confirmed_at: "2010-12-09 23:08:54", confirmation_sent_at: "2010-12-09 23:08:36", failed_attempts: 0, unlock_token: nil, locked_at: nil, created_at: "2010-12-09 23:08:36", updated_at: "2011-08-05 17:18:19", name: "UserOne">}

В строке № 8, конечно, я пытался использовать link_to.Я предполагаю, что link_to игнорирует область действия, которая учитывает добавление current_user в параметр: group.Есть ли способ, чтобы этого не случилось, или я решаю проблему совершенно неправильно?

Ответы [ 2 ]

0 голосов
/ 05 августа 2011

Проблема в том, что вы не можете связаться с пользователем без передачи в группу и подгруппу.Читая вашу ошибку, можно понять, что rails пытается преобразовать вашего current_user в группу.

0 голосов
/ 05 августа 2011

Ваш resource :users находится внутри области действия, поэтому у вас нет маршрута /users/:id.

Вы можете попробовать это:

scope ":group/:subgroup/" do
  devise_for :users
end
resources :users

Я не уверен, есть ли у scope опция shallow => true (думаю, она есть, и вам, вероятно, стоит ее использовать).

Надеюсь, это поможет

...