точки в маршрутах URL с рельсами пространства имен 3.1 - PullRequest
3 голосов
/ 10 января 2012

У меня есть это в rout.rb

root :to => "posts#index"

  devise_for :users,  :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

  resources :users, :only => :show

  resources :boards 

  resources :posts do
  resources :comments
  end 

namespace :users do
 resources :posts do
  get :posts, :on => :member
 end
 resources :boards do  
  get :boards, :on => :member
 end  
end      

маршруты рейка:

  boards_users_board GET    /users/boards/:id/boards(.:format)        {:action=>"boards", :controller=>"users/boards"}
        users_boards GET    /users/boards(.:format)                   {:action=>"index", :controller=>"users/boards"}
                    POST    /users/boards(.:format)                   {:action=>"create", :controller=>"users/boards"}
     new_users_board GET    /users/boards/new(.:format)               {:action=>"new", :controller=>"users/boards"}
    edit_users_board GET    /users/boards/:id/edit(.:format)          {:action=>"edit", :controller=>"users/boards"}
         users_board GET    /users/boards/:id(.:format)               {:action=>"show", :controller=>"users/boards"}

Если поставить эту ссылку с 2 параметрами:

<% @posts.each do |post| %>
   <%= link_to post.board.name, users_board_path(post.user, post.board) %>
<% end %>

Я получаю следующий URL с точкой:

http://localhost:3000/users/boards/hyperrjas.board-2

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

Мой вопрос: как мне изменить точку для косой черты / в сгенерированном URL? должен выглядеть и работать следующим образом:

http://localhost:3000/users/boards/hyperrjas/board-2

1 Ответ

0 голосов
/ 10 января 2012

Переместить пользовательские маршруты ниже вложенных.Rails сначала «поймает» верхние маршруты.

Ваша проблема на самом деле в генерации маршрутов (и некоторых в порядке заказа).Если вам нужен доступ к доскам пользователей, вам нужен не маршрут namespaced, а маршрут nested.

Если вам нужны /users/:user_id/boards и /users/:user_id/boards/:id, вам понадобится вложенный маршрут.Обратите внимание, что на втором маршруте есть 2 параметра (user_id и id).Если вы используете маршрут с пространством имен, вам понадобится только один (доска id).Вторым аргументом будет формат.Обратите внимание, что при выводе из маршрутов рейка вам «нужен» только 1 параметр.

Попробуйте следующий маршрут, чтобы проверить, работает ли он.

  resources :users do
    # This will give you /users/:user_id/posts
    # and /users/:user_id/posts/:post_id
    # among others
    resources :posts
  end
...