在轨道中创建一个slug而不在模型中定义它

时间:2014-01-24 09:04:00

标签: ruby-on-rails ruby url slug

我想通过覆盖to_params方法在rails中创建一个友好的URL:

 def to_param
     "#{id}-#{brand}-#{name}"
 end 

但是,如果我从另一个控制器调用该对象,该怎么办?例如,如果我有站点控制器和产品控制器......我想在站点控制器中创建一个显示产品的操作,而不是使用Products控制器中的show操作。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:2)

对于这种情况,您应该使用已存在的gem。 friendly _ id gem提供您正在寻找的功能。查看他们的guide,了解有关设置和使用的更多信息。

举一个简单的例子,取自here

在您的模型中:

class Post < ActiveRecord::Base
  attr_accessible :content, :title

  extend FriendlyId
  friendly_id :title, use: :slugged
end

然后创建一个迁移:

$ rails g migration add_slug_to_posts slug:string
$ rake db:migrate

并填写:

class AddSlugToPosts < ActiveRecord::Migration
  def change
    add_column :posts, :slug, :string
    add_index :posts, :slug
  end
end