2016-05-11 8 views
1

私のショーページでは、変数の値に基づいて 'もっと見る'ボタンのルートを変更したいと思います。例えば、私がショーページのフロリダのフロリダにある建物を見て、「もっと見る」をクリックすると、再びタンパの建物の完全なリストを見るためにlocations_tampa_pathに行きたいと思います。しかし、私はリンクにパスをしたいと思い、その特定の建物の都市に基づいて変更するには:Rails変数をルートに渡す方法

このような何か:location_#{@location.city}_path

最良の方法は何ですかこれをする?
ご協力いただきありがとうございます。

私のコントローラ

class LocationsController < ApplicationController 
    def index 
    @locations = Location.all 
    end 
    def new 
    @location = Location.new 
    end 
    def create 
    @location = Location.new(location_params) 
    if @location.save 
     flash[:notice] = "New location added" 
     redirect_to root_path 
    else 
     flash.now[:error] = 'Cannot send message' 
     render 'new' 
    end 
    end 
    def jacksonville 
    @locations = Location.where(:city => "Jacksonville") 
    end 
    def stpetersburg 
    @locations = Location.where(:city => "St. Petersburg") 
    end 
    def orlando 
    @locations = Location.where(:city => "Orlando") 
    end 
    def tampa 
    # @location = Location.find(params[:id]) 
    @locations = Location.where(:city => "Tampa") 
    @photo = Photo.new 
    end 
    def show 
    @location = Location.find(params[:id]) 
    @photo = Photo.new 
    end 

    private 

    def location_params 
    params.require(:location).permit(:name, :description, :address, :city, :featured) 
    end 
end 

ルート

get 'locations/tampa', to: 'locations#tampa' 
get 'locations/jacksonville', to: 'locations#jacksonville' 
get 'locations/orlando', to: 'locations#orlando' 
get 'locations/st_petersburg', to: 'locations#stpetersburg' 
resources :locations do 
resources :photos, only: :create 
end 

答えて

3

あなたがする必要はありません、あなたのコントローラで自分自身を繰り返しています。あなたのroutes.rbをで

:あなたはパラメータ化ルートをしたいように思える

get "locations/:location", to: 'locations#show_location', as: :location_path 

その後、あなたはあなたのビュー/コントローラにパラメータとしてlocationを渡すことができます。

location_path(location: @location.city) 

そして、あなた

def show_location 
    @location = Location.find_by(city: params[:location]) 
    @photo = Photo.new 

    if @location 
     render @location.city 
    end 
end 
+0

ター:あなたのLocationsControllerでシンプルなshow_locationアクションを持つことができますあなたは素早い応答のためにあなたをnkしてください!私はroutes.rbファイルから関連するコードを投稿しましたが、私はまだRailsを学んでいますが、このような設定はまだ使用していません。これがどういう仕組みか、私の頭の中で少し説明できますか?都市の別々の行動を取り除くことを提案していますか? – halfacreyum

+0

これをもっと理解したら、私のコードを実装してこれを実装することが大好きです。私は既存のコードでこの作業を行うことができました:location_path(@ location.city.downcase)、これは理想的ではないと確信しています今のところ働いています。 – halfacreyum

関連する問題