2011-04-08 208 views
0

我在Rails 3中工作的一個應用程序有一個City模型。每個城市都有一個「名稱」欄。我想這個City.name是基地網址。rails 3動態路由

例如,城市名稱爲「Los Angeles」:http://myapp.com/los-angeles

如果我使用

match '/:name' => "cities#show" 
resources :cities 

我可以得到http://myapp.com/Los%20Angeles,但我需要它是「洛杉磯 - 洛杉磯」。我想我需要更改city.rb文件中的to_params。

此外,我的link_to應該看起來像什麼時候這是工作?現在我想

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

,這是給我這個錯誤:

No route matches {:action=>"destroy", :name=>"Los Angeles", :controller=>"cities"} 

最後,你要注意,我計劃在嵌套資源的城市下面的路線,這樣我結束了像http://myapp.com/los-angeles/messages/message-content-using-to-param

等網址..

什麼建議可以給將不勝感激!

回答

1

我個人使用Friendly Id來處理漂亮的URL到ActiveRecord鉤子(順便說一句,非常好)。這個gem也有嵌套的資源支持。

+0

這對slu nice很好!儘管如此,它不會對我的routes/link_to問題做任何事情。 – goddamnyouryan 2011-04-08 04:11:48

1

方法described here將是一種方法。覆蓋to_param也在Rails docs中描述。

將此添加到您的城市模型。

def to_param 
    "#{self.name_for_url}" 
end 

def name_for_url 
    self.name.gsub(/^A-Z0-9\-_/i,'') 
end 

這將導致city_path(@city)提供/cities/los-angeles

如果你想城是你的根控制器,在routes.rb中:現在

map.root :controller => 'city' 

http://myapp.com/los-angeles應該工作。