2016-09-02 3 views
-2

にルビーにルートを設定するには:<% =のlink_toする@ city.name、city_path(ID:@city)%>

が、それはURLから正しい方法ではありません はlocalhost:?3000 /都市のid = 2
しかし、私はURL必要があるように:され はlocalhost:3000/NEWYORKその後、
Iました: <% =のlink_toの@ city.name、city_path(@ city.name)%>
次にURLはです
私の行動は都市です。
はlocalhost:3000/cityname例えばとして
:ようなURLのために何をすべきか
はlocalhost:3000 /中国
はlocalhost:3000 /パキスタンどのように私のように街のページにリダイレクトしていますレール

あなたは get '/:city_name' => 'city#city_method', as: 'city'

は次のようにそれを使用行うことができます

+0

friendly_id gemを使用してください –

答えて

0

<%= link_to @city.name, city_path(city_name: @city.name) %>

0

さて、あなたはあなたのルートでparamを指定する必要があります。

あなたが渡すことができますルートを生成する場合、次に

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

:あなたはあまりにも市にそれを定義する必要があります -

はまた、Railsはあなたが探しているもののparam返すべきであるモデルに定義されたto_param方法を、使用しています

link_to @city.name, city_path(@city) 

と最後ではなく、少なくとも、find_byそのname、ないIDに自分のコントローラを調整します:city_pathにオブジェクトを直接

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

または、すぐに使えるソリューションのために、friendly_idのようないくつかの既存の宝石を試してみてください!あなたの宝石のファイルで

1

お使いのコントローラの書き込みではモデル

rails g migration AddSlugToCity 

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

でナメクジの列を追加し、移行を作成

をインストールgemfile実行バンドルの宝石を書き込んだ後

gem "friendly_id" 

を書きます

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

あなたの街のモジュールでフレンドidを使用

class City < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :title, use: :slugged 
end 
関連する問題