Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么永久链接的格式验证失败?_Ruby On Rails_Validation_Rspec_Format_Permalinks - Fatal编程技术网

Ruby on rails 为什么永久链接的格式验证失败?

Ruby on rails 为什么永久链接的格式验证失败?,ruby-on-rails,validation,rspec,format,permalinks,Ruby On Rails,Validation,Rspec,Format,Permalinks,我已经编写了一个rspec测试,用于检查permalink中的无效字符: describe "formatting permalinks when creating a page" do it "does not allow crazy characters" do page = create(:page, permalink: '#$%^&*first-title') expect(page).to have(1).errors_on(:perma

我已经编写了一个rspec测试,用于检查permalink中的无效字符:

  describe "formatting permalinks when creating a page" do

    it "does not allow crazy characters" do
      page = create(:page, permalink: '#$%^&*first-title')
      expect(page).to have(1).errors_on(:permalink)
    end

  end
在我的
page.rb
模型中,我实施了此验证以使其通过:

class Page < ActiveRecord::Base

  validates :permalink, format: {:with => /\A[a-zA-Z-]+\Z/, :on => :save!}

  before_create :create_slug

  def create_slug
    self.permalink = self.permalink.parameterize
  end
end

我做错了什么?如何修复此问题?

您的create\u slug调用将参数化。因为它是在创建之前作为一个文件运行的,所以它将“#$%^&*first title”更改为“first title”


此外,on:应仅与create and update一起使用,因此我不确定它是否正在运行。

那么您的意思是不需要验证?即使我删除了验证,测试仍然失败。如何更正此问题?请尝试删除:on=>:save!你的验证的一部分,或者(b)删除:create_slug before filterI我没有意识到参数化做了这么多-我现在已经取消了测试。是的,参数化非常整洁(和/或危险)!看看这里的文档
expected 1 errors on :permalink, got 0