2011-10-12 82 views
0

我正在顯示數據庫中的城市列表,每個都是鏈接。我想要當用戶點擊任何城市時,該行動通過抓住該城市的標識進行響應,並在下一個動作中使用它(顯示動作在這種情況下)。那麼你如何從鏈接中獲得一個ID?以下是我的想法,沒有工作。提前感謝您。我如何從鏈接訪問ID?

查看/城市

<%@cities.each do |city| %> 
    <a href="/deal/city"><%=city.name%></a><br/> 
    <%end%> 

控制器

Class DealController < ApplicationController 
    def all_cities 
    @cities=City.find(:all) 
    end 

    def city 
    @city=City.find(params[:city_id]) 
    session[:city_id] = @city.id 
    redirect_to :controller=>"deal",:action=>"show" 
    end 

    def show 
    unless session[:city_id].nil? || session[:city_id].blank? 
    @city = City.find(session[:city_id]) 
    @[email protected] 
    end 

    end 

路線

get "deal/city" 
    match 'deal/city' => "deal#city" 

回答

1

你是不是經過city_id中的鏈接。嘗試:

<% @cities.each do |city| %> 
    <a href="/deal/city?city_id=<%= city.id %>"><%= city.name %></a><br/> 
<% end %> 

如果你想鏈接到像「/交易/城市/ 1」,並獲得1爲params[:city_id],你可以修改你這樣的路線:

match 'deal/city/:city_id' => "deal#city", :via => :get 

和使用鏈接像這樣:

<% @cities.each do |city| %> 
    <a href="/deal/city/<%= city.id %>"><%= city.name %></a><br/> 
<% end %> 
+0

非常感謝你的工作! – katie

+0

@katie ...在你的代碼中,我看到'除非session [:city_id] .nil? ||會話[:city_id] .blank?''實際上'.blank?'檢查'nil'值(事實上它檢查'nil','''''''''''']'什麼不是) 。所以你的代碼可以簡化爲'除非session [:city_id] .blank?'或者使用'.present?',這與'.blank?'相反,'if session [:city_id] .present?'(這是更可讀的恕我直言) – rubyprince