我正在使用 Ruby on Rails 版本 3.2.13。
这是我的模型定义:
module Recipes
class Recipe < ActiveRecord::Base
include ApplicationHelper
attr_accessible :body, :title, :author, :photos, :tags
has_many :photos
has_many :favorites
has_many :taggings
has_many :tags, :through => :taggings
belongs_to :author,
:class_name => :User,
:foreign_key => :author_id
before_create :default_values
before_save :create_slug
validates_presence_of :title, :body, :author
validates_uniqueness_of :title, :slug
def create_slug
self.slug = ApplicationHelper.slugify(self.title)
end
def default_values
self.view_count ||= 0
end
end
end
如果我创建一个标题为“Test Title #1”的记录,并尝试创建另一个标题为“Test Title #1”的记录,我会收到一个验证错误,说明标题已被占用。如果我创建一个标题为“Test Title #1”的记录,并尝试创建另一个标题为“Test Title 1”的记录,它会成功。为两条记录生成的 slug 是相同的,“test-title-1”,这不应该发生。
这是代码slugify
:
module ApplicationHelper
def self.slugify(text)
text.gsub(/[\W]+/, " ").strip.gsub(/[\s]+/, "-").downcase
end
end