我正在编写一个小型CMS作为Rails测试项目(也计划将其用于我的个人网站).我想要SEO友好的URL,所以我有一个测试来验证永久链接是根据页面标题自动创建的(例如关于我们=> about-us).但是,我无法弄清楚为什么这个测试失败了.这是代码(我使用的是Rails 2.3.2):
# page_test.rb
# note I am using the "shoulda" framework
require 'test_helper'
class PageTest < ActiveSupport::TestCase
should_validate_presence_of :title, :permalink, :content
should_validate_uniqueness_of :title
should "create permalink automatically" do
p = pages(:sample_page)
p.save
assert_equal "sample-page", p.permalink
end
end
# pages.yml
sample_page:
title: Sample Page
permalink: # gets automatically created by model
content: This is a sample page
# page.rb
class Page < ActiveRecord::Base
validates_presence_of :title, :permalink, :content
validates_uniqueness_of :title
before_save :generate_permalink
private
def generate_permalink
self.permalink = self.title.parameterize
end
end
会发生什么是永久链接是零,而不是像它应该的那样“样本页面”.但是,如果我手动将固定链接放在夹具中并更改测试,例如:
p - pages(:sample_page)
p.title = "Contact Us"
p.save
assert_equal "contact-us", p.permalink
我可以像这样解决它,但我想知道为什么它没有为原始测试触发before_save方法.
最佳答案 好吧,我能够搞清楚.我需要使用before_validation作为回调而不是before_save