slug在Rails中使用了什么?

时间:2017-02-15 14:15:21

标签: ruby-on-rails

我正在阅读小时源代码,并且有一个名为slug

的类

https://github.com/DefactoSoftware/Hours/blob/development/app/models/concerns/sluggable.rb

我看到每个模型都有一个名为slug的属性,带有字符串类型?

在这种情况下,slug用于什么?

下面的代码是tag模型中使用的一个slug,

class Tag < ActiveRecord::Base
  attr_reader :total_hours
  include Sluggable

  validates :name, presence: true,
                   uniqueness: { case_sensitive: false }

  has_many :taggings
  has_many :hours, through: :taggings
  has_many :projects, -> { uniq }, through: :hours
  has_many :users, -> { uniq }, through: :hours
  belongs_to :project

  def self.list
    Tag.order(:name).pluck(:name)
  end

  private

  def slug_source
    name
  end
end

3 个答案:

答案 0 :(得分:3)

一般来说,我用它来生成friendly url。如果您愿意,可以在URL中使用它的人类可读ID。我认为它的搜索引擎优化也很友好。你可以这样使用:

delete

而不是

mysite.com/products/xbox360-fifa-15

在你的链接中,如果slug已经存在,该方法将生成:

mysite.com/products/123456

效果:不要忘记在您使用的每个slug列上创建索引。

答案 1 :(得分:2)

在那里查看to_paramhttps://github.com/DefactoSoftware/Hours/blob/development/app/models/concerns/sluggable.rb#L9-L11

它适用于更漂亮的网址。将使用字符串而不是整数ID。说

/tags/ruby-on-rails

而不是

/tags/123412341234

答案 2 :(得分:2)

这只是一种创建用户友好网址的方法:

http://example.com/states/washington

而不是:

http://example.com/states/4323454