为什么我的Rails DB迁移不能创建coluimns?

Mat*_*wis 0 ruby database migration postgresql ruby-on-rails

我正在尝试使用PostgreSQL在Rails中进行数据库迁移,但结果模式不包含任何我的表定义.我没有看到我的语法有什么问题吗?

以下是我运行"rake db:migrate"后我的一个迁移文件和生成的模式文件的示例.

迁移文件:

class Fields < ActiveRecord::Migration[5.2]

      def change

        def up



          create_table :fields do |t|

            t.column :totalsalesprsn, :float, :limit => nil, :null => false

            t.column :totaladmkspend, :float, :limit => nil, :null => false

            t.column :totalsalescost, :float, :limit => nil, :null => false

            t.column :miscsales, :float, :limit => nil, :null => false

            t.column :numleads, :float, :limit => nil, :null => false

            t.column :costleads, :float, :limit => nil, :null => false

            t.column :totalsalescost2, :float, :limit => nil, :null => false

            t.column :totalmarketspent, :float, :limit => nil, :null => false

            t.column :numsales, :float, :limit => nil, :null => false

            t.column :averagecost, :float, :limit => nil, :null => false

            t.column :costpersale, :float, :limit => nil, :null => false

            t.column :totalspending, :float, :limit => nil, :null => false

            t.column :totalsalesdonate, :float, :limit => nil, :null => false

            t.column :totalsales, :float, :limit => nil, :null => false

            t.column :pototal, :float, :limit => nil, :null => false

            t.column :posales, :float, :limit => nil, :null => false



            t.column :form_id, :integer

            t.column :created_at, :timestamp

          end

        end



        def down

          drop_table :fields

        end

      end

    end
Run Code Online (Sandbox Code Playgroud)

架构文件:

ActiveRecord::Schema.define(version: 2018_10_25_161515) do



  # These are extensions that must be enabled in order to support this database

  enable_extension "plpgsql"



  create_table "fields", force: :cascade do |t|

    t.datetime "created_at", null: false

    t.datetime "updated_at", null: false

  end



  create_table "forms", force: :cascade do |t|

    t.datetime "created_at", null: false

    t.datetime "updated_at", null: false

  end



  create_table "tables", force: :cascade do |t|

    t.datetime "created_at", null: false

    t.datetime "updated_at", null: false

  end



end
Run Code Online (Sandbox Code Playgroud)

它会与我的模型文件有关吗?我不知道它为什么这样做,我不能发布更多代码,因为我必须在这篇文章中添加更多细节,以避免警告我的问题没有足够的细节.

Ras*_*thi 5

因为你定义它不创造列updown内部change方法.

试试这个

class Fields < ActiveRecord::Migration[5.2]
  def up
    create_table :fields do |t|
      t.column :totalsalesprsn, :float, :limit => nil, :null => false
      t.column :totaladmkspend, :float, :limit => nil, :null => false
      t.column :totalsalescost, :float, :limit => nil, :null => false
      t.column :miscsales, :float, :limit => nil, :null => false
      t.column :numleads, :float, :limit => nil, :null => false
      t.column :costleads, :float, :limit => nil, :null => false
      t.column :totalsalescost2, :float, :limit => nil, :null => false
      t.column :totalmarketspent, :float, :limit => nil, :null => false
      t.column :numsales, :float, :limit => nil, :null => false
      t.column :averagecost, :float, :limit => nil, :null => false
      t.column :costpersale, :float, :limit => nil, :null => false
      t.column :totalspending, :float, :limit => nil, :null => false
      t.column :totalsalesdonate, :float, :limit => nil, :null => false
      t.column :totalsales, :float, :limit => nil, :null => false
      t.column :pototal, :float, :limit => nil, :null => false
      t.column :posales, :float, :limit => nil, :null => false
      t.column :form_id, :integer
      t.column :created_at, :timestamp
    end
  end

  def down
    drop_table :fields
  end
end
Run Code Online (Sandbox Code Playgroud)

请查看此处有关如何定义迁移的文档.


从文档中

更改方法是编写迁移的主要方法.它适用于大多数情况,Active Record知道如何自动撤消迁移.

因此,您也可以通过执行以下操作来定义迁移

class Fields < ActiveRecord::Migration[5.2]
  def change
    create_table :fields do |t|
      t.column :totalsalesprsn, :float, :limit => nil, :null => false
      t.column :totaladmkspend, :float, :limit => nil, :null => false
      t.column :totalsalescost, :float, :limit => nil, :null => false
      t.column :miscsales, :float, :limit => nil, :null => false
      t.column :numleads, :float, :limit => nil, :null => false
      t.column :costleads, :float, :limit => nil, :null => false
      t.column :totalsalescost2, :float, :limit => nil, :null => false
      t.column :totalmarketspent, :float, :limit => nil, :null => false
      t.column :numsales, :float, :limit => nil, :null => false
      t.column :averagecost, :float, :limit => nil, :null => false
      t.column :costpersale, :float, :limit => nil, :null => false
      t.column :totalspending, :float, :limit => nil, :null => false
      t.column :totalsalesdonate, :float, :limit => nil, :null => false
      t.column :totalsales, :float, :limit => nil, :null => false
      t.column :pototal, :float, :limit => nil, :null => false
      t.column :posales, :float, :limit => nil, :null => false
      t.column :form_id, :integer
      t.column :created_at, :timestamp
    end
  end
end
Run Code Online (Sandbox Code Playgroud)