2016-09-02 3 views
-2

Я перенаправление на страницу города как: <% = link_to @ city.name, city_path (ID: @city)%>

но это не правильный путь, так как URL в настоящее время: локальный: 3000/город ID = 2
Но мне нужно URL-адрес, как: локальный: 3000/NewYork
тогда я сделал: <% = link_to @ city.name, city_path (@ city.name)%>
then url is: http://localhost:3000/city.newyork
Мое действие - город. Что делать для URL, как:
локального хоста: 3000/CITYNAME
как, например:
локальный: 3000/китай
локальный: 3000/пакистанкак маршрут установлен в рубине на рельсах

+0

use friendly_id gem –

ответ

0

вы можете сделать get '/:city_name' => 'city#city_method', as: 'city'

использовать его как <%= link_to @city.name, city_path(city_name: @city.name) %>

0

Ну, вам нужно указать param в маршрутах:

resources :cities, param: :name 

Кроме того, Rails использует to_param метод, определенный на моделях, которые должны вернуть то, что пары вы ищете - вы должны определить, что Сити тоже:

class City < ActiveRecord::Base 
    # ... 
    def to_param; name; end 
    # ... 
end 

Затем, при создании маршрута вы можете передать объект непосредственно city_path:

link_to @city.name, city_path(@city) 

и последнее, но не в последнюю очередь, настроить контроллер find_by что name, а не идентификатор:

@city = City.find_by! name: params[:name] 

Или для готового решения попробовать некоторые существующие драгоценные камни, такие как friendly_id!

1

В файле гем написать

gem "friendly_id" 

После написания камень в Gemfile пачке выполнения установки

Создать миграцию, чтобы добавить столбец слизней в модели

rails g migration AddSlugToCity 

add_column :cities, :slug, :string 
add_index :cities, :slug, unique: true 

в контроллере записи

@city = City.friendly.find(params[:id]) 

В вашем модуле города используйте дружественный идентификатор

class City < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :title, use: :slugged 
end 
Смежные вопросы