使用下划线而不是空格进行路由

时间:2013-10-05 20:46:36

标签: ruby-on-rails ruby routing ruby-on-rails-4

Ruby on Rails 4.0。我有一个'专业'模型,'管理员'可以使用标准资源路由进行修改。然而,还有一个单独的面向消费者的控制器,用于以漂亮的方式显示那些'Specialties'。因此,我有以下路线:

get "specialty/:name" => "site#specialty", as: :site_specialty
resources :specialties

网站#专业控制器操作如下:

def specialty
  @specialty = Specialty.find_by_name(params[:name])
end

这会产生以下百分比转义路由的网址:

/specialty/project%20management

我宁愿有这样的事情:

/specialty/project_management

如何用下划线替换空格并仍然在控制器操作中查找正确的模型?关于安全性的任何附注也表示赞赏

2 个答案:

答案 0 :(得分:1)

尝试使用 to_param

<强>型号:

class Specialty < ActiveRecord::Base
  def to_param
   name.parameterize
  end
end

<强>控制器:

def specialty
    @specialty = Specialty.find(params[:id])
end

应该这样做......

参考文献:

答案 1 :(得分:1)

@manishie的答案很好,但是还有一个宝石可以为你处理这个(以及更多),称为Friendly ID。它基于与前面提到的相同的to_param技巧,但也有处理其他特殊字符和处理冲突的选项。

class Specialty < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name
end

Specialty.friendly.find(params[:name])