在我的 Rails 应用程序中,我有一个模型Link
,它具有属性name
和url
. 以前,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
那么到底是怎么回事?