2

私の 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              

それで一体何が起こっているのですか?

4

0 に答える 0