Пользовательский URL-адрес в маршруте Rails

Я хочу добавить суффикс к своему URL-адресу в соответствии со столбцом type в моей таблице базы данных.

# shop_controller.rb
...
def near
  @shop = Shop.find(params[:id])
  @type = @shop.type
end

# routes.rb
resources :spots do
  member do
    get :near
  end
end

Страницы, которые у меня есть, в настоящее время находятся в app/views/shops/nearby.html.erb. URL-адрес, который создается в настоящее время:

http://localhost/shops/1/near

Вместо того, чтобы создавать несколько страниц для разных типов: nearby_country.html.erb, nearby_state.html.erb, nearby_city.html.erb, которые не являются RESTful, я бы предпочел добавить тип к этому URL-адресу, чтобы отфильтровать магазины по типу, чтобы в будущем, когда у меня будет больше типов, он мог отображаться автоматически :

http://localhost/shops/1/near_country
http://localhost/shops/1/near_state
http://localhost/shops/1/near_city

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

nearby_country_shop_path
nearby_state_shop_path
nearby_city_shop_path

Кто-нибудь может подсказать? Спасибо!


person Victor    schedule 16.11.2011    source источник


Ответы (2)


См. раздел 3.1 в:

http://guides.rubyonrails.org/routing.html

но вам, вероятно, придется использовать такие маршруты, как:

http://localhost/shops/1/near?country
http://localhost/shops/1/near?state
http://localhost/shops/1/near?city

Смотрите также:

http://railscasts.com/episodes/203-routing-in-rails-3

http://railscasts.com/episodes/231-routing-walkthrough

http://railscasts.com/episodes/232-routing-walkthrough-part-2

person Tilo    schedule 16.11.2011
comment
Можно ли вместо этого добавить подчеркивание: near_country? - person Victor; 16.11.2011
comment
Потому что на самом деле у меня уже есть ?country для моего show.html.erb - person Victor; 16.11.2011

Это не совсем то, что вы просили, но вы можете добавить параметр x в свой маршрут, например.

resources :spots do
  member do
    get 'near/:x', :action => :near, :as => :near
  end
end

Это должно дать вам такие URL-адреса, как:

/spots/1/near/country
/spots/1/near/state
/spots/1/near/city

.. и маршрут вроде:

near_spot GET /spots/:id/near/:x(.:format) {:action=>"near", :controller=>"spots"}

.. и помощники URL, такие как:

near_spot_path(spot_id, :country)
near_spot_path(spot_id, :state)

и т.п.

person Jared Beck    schedule 18.12.2011