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
如何用下划线替换空格并仍然在控制器操作中查找正确的模型?关于安全性的任何附注也表示赞赏
答案 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])