Rails在路径中使用带连字符的名称进行路由

时间:2016-11-16 15:43:36

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

由于用户使用带有连字符的姓氏,我遇到了一些路由问题。

我的路线是

    get '/team/:first_name-:last_name', to: 'home#employee', as: :employee

像" / john-smith"这显然可以正常工作,但对于一个带有带连字符的姓氏的员工,例如" Sarah Jane-Smith"导致" / sarah-jane-smith。"

Rails在第二个连字符上分裂,因为该名称不存在而抛出错误。

    SELECT  "employees".* FROM "employees" WHERE (first_name = 'sarah-jane' AND last_name = 'smith')

是否有一种简单的方法可以更改路线解释而无需彻底改变员工的路线?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我能想到实现这一目标的一种方法是做这样的事情:

# routes.rb
get '/team/:full_name', to: 'home#employee', as: :employee

然后您可以使用正则表达式来分割full_name

# home_controller.rb
class HomeController
  private

  def name
    # The regex below assumes that first name can't have hyphens.
    match_data = params[:full_name].match(/([^-]*)-(.*-?.*)/) 
    {
      first_name: match_data[1],
      second_name: match_data[2]
    }
  end
end