特定の形式 (seo の目的) に適合するリンクを実装しようとしています。
例を次に示します。
match '/activities-Palmdale-California', :to => 'explores#activity_by_city', :location=>'Palmdale-California'
都市と州ごとに場所が変わる場所。
追加のモデルなどを作成せずに、ルート ファイル内の都市と州の配列 (定義済み) を動的にループする方法はありますか?
特定の形式 (seo の目的) に適合するリンクを実装しようとしています。
例を次に示します。
match '/activities-Palmdale-California', :to => 'explores#activity_by_city', :location=>'Palmdale-California'
都市と州ごとに場所が変わる場所。
追加のモデルなどを作成せずに、ルート ファイル内の都市と州の配列 (定義済み) を動的にループする方法はありますか?
ルートにパラメーターを含めることができるため、次のようなものが機能するはずです。
match "/activities-:location", :to => 'explores#activity_by_city'
そして、 のlocation
コントローラ アクションに送信する必要がありますparams[:location]
。アプリケーションが受け入れる URL を事前定義された配列内の場所のみに制限したい場合 (これを と呼びますValidLocations
)、:constraints
オプションを使用してルート内でそれを行うことができます:
match "/activities-:location", :to => 'explores#activity_by_city', :constraints => proc { |req| ValidLocations.include?(req.params[:location]) }
またはコントローラーで:
def activity_by_city
...
unless ValidLocations.include?(params[:location])
flash[:error] = "Invalid location."
redirect_to ...
return
end
...
end