如何补充名称路由而不是id

时间:2016-09-02 06:09:08

标签: ruby-on-rails

我需要网址,

  

本地主机:3000 /纽约

代替,

  

本地主机:19分之3000

3 个答案:

答案 0 :(得分:1)

在你的宝石文件中写

<input type="text" ng-model="todoText1"  size="30"
     placeholder="add new todo here" ng-blur ="myfunction()">

<input type="text" ng-model="todoText2"  size="30"
     placeholder="add new todo here" ng-focus ="myfunction()">

在gemfile中编写gem后运行bundle install

创建迁移以在模型中添加slugs列

 gem "friendly_id"

在你的控制器中写

 rails g migration AddSlugToCity

 add_column :cities, :slug, :string
 add_index :cities, :slug, unique: true

在您的城市模块中使用友好ID

  @city = City.friendly.find(params[:id])

答案 1 :(得分:0)

你可以get '/:city_name' => 'city#city_method', as: 'city'

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

一样使用它

答案 2 :(得分:0)

嗯,您需要在路线中指定param

resources :cities, param: :name

此外,Rails使用模型上定义的to_param方法,它应该返回您要查找的参数 - 您还需要在City上定义它:

class City < ActiveRecord::Base
  # ...
  def to_param; name; end
  # ...
end

然后,当您生成路线时,您可以将对象直接传递给city_path

link_to @city.name, city_path(@city)

最后,但并非最不重要的是,将您的控制器调整为find_by name,而不是ID:

@city = City.find_by! name: params[:name]

或者,对于开箱即用的解决方案,请尝试一些现有的宝石,例如friendly_id