【问题标题】:Route using underscores instead of spaces使用下划线而不是空格进行路由
【发布时间】:2013-10-05 20:46:36
【问题描述】:

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

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

/specialty/project%20management

我宁愿有这样的东西:

/specialty/project_management

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

【问题讨论】:

  • 是否有您在哪里使用 url_for 的视图或帮助代码示例?我们需要看到这一点,看看你是如何生成这些路径的

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


【解决方案1】:

尝试使用 to_param

型号:

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

控制器:

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

应该可以的...

参考资料:

【讨论】:

    【解决方案2】:

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

    class Specialty < ActiveRecord::Base
      extend FriendlyId
      friendly_id :name
    end
    
    Specialty.friendly.find(params[:name])
    

    【讨论】:

      猜你喜欢
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多