ruby-on-rails – 在Rails中创建永久链接(slu) – 为什么我的测试失败了?

我正在编写一个小型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

点赞