2011-10-12 84 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