2

在我的 Rails 应用程序中,我有一个模型Link,它具有属性nameurl. 以前,url是不允许的nil,但我已经删除了这个验证。在开发中,我可以使用空白 url 保存链接,但在生产(Heroku)中,验证仍然失败,说url can not be blank.

为了说明,如果我在开发控制台和中运行相同的代码会发生以下情况heroku run rails console

发展:

foo = Link.new(name: 'example', url: 'example.com')
foo.valid?
# true
foo = Link.new(name: 'example')
foo.valid?
# true

如果我在heroku 控制台上运行它,我会得到:

foo = Link.new(name: 'example', url: 'example.com')
foo.valid?
# true
foo = Link.new(name: 'example')
foo.valid?
# false
foo.errors
#<ActiveModel::Errors:0x007fbd85b95f38 @base=#<Link id: nil, name: "example", url: nil, created_at: nil, updated_at: nil>, @messages={:url=>["can't be blank"]}>

为什么会这样?几点:

  • heroku restart没有帮助
  • 也没有清除和重置heroku db。(我的应用程序已部署到 heroku 但尚未“上线”。)
  • 我的最新更改肯定会推送到 heroku -git diff heroku/master没有返回任何内容。我什至手动检查link.rb了 heroku 并确认它与我的开发机器上的版本完全相同。
  • url = null在数据库中绝对是允许的 - 这是 schema.rb 的相关部分:

    create_table "links", :force => true do |t|
      t.string   "name"
      t.string   "url"
      t.integer  "project_id"
      t.datetime "created_at", :null => false
      t.datetime "updated_at", :null => false
    end
    

这是我的app/models/link.rb:,您可以看到没有验证可以防止 url 为空。

class Link < ActiveRecord::Base
  attr_accessible :name, :url

  validates :name, presence: true
  validates :project_id, presence: true

  belongs_to :project
end              

那么到底是怎么回事?

4

0 回答 0