2

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

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

site#specialty 控制器操作如下:

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

这会产生类似以下百分比转义路由的 url:

/specialty/project%20management

我宁愿有这样的东西:

/specialty/project_management

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

4

2 回答 2

2

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

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

Specialty.friendly.find(params[:name])
于 2013-10-06T15:25:37.077 回答
2

尝试使用to_param

模型:

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

控制器:

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

应该这样做...

参考:

于 2013-10-05T21:19:37.990 回答