表单模型/ id / name中的路由

时间:2016-02-19 17:41:13

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

我试图设置slug以获得这样的网址: /artists/1/pink-floyd

我的to_param方法是:

  def to_param
    "#{self.id}/#{self.name.parameterize}"
  end

不幸的是,网址是/artists/1%2Fpink-floyd 我怎样才能按照我想要的方式完成这项工作?

1 个答案:

答案 0 :(得分:0)

你可以通过多种方式做到这一点。

我认为与你想达到的目标最接近的是:

Lunches (table)
---------------
Lunch_Guid (PK, varchar(32), not null)
Lunch_Name (varchar(50), not null)
Lunch_Key (varchar(50), not null) -- UrlSafe_base64 random string
....

Foods (table)
-------------
Food_Guid (PK, varchar(32), not null)
Food_Name (varchar(50), not null)
Food_Key (varchar(50), not null) -- UrlSafe_base64 random string

....

Tray (table)
------------
Tray_Guid (PK, varchar(32), not null)
Item_Key (varchar(50), null) -- "Make-shift relationship."
Tray_Key (varchar(50), not null) -- UrlSafe_base64 random string
...

这使得:

def to_param "#{self.id}-#{self.name.parameterize}" end

另一种方法是改变路线:

/artists/1-pink-floyd

这将为您的控制器操作提供参数get "/artists/:id/:parameterized_name" => "artists#show", as: :artist

在视图中使用它:

:parameterized_name