私の 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
何も返されません。heroku を手動で検査link.rb
したところ、開発マシンのバージョンとまったく同じであることを確認しました。 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
それで一体何が起こっているのですか?