Rails 4迁移不向现有数据库添加字段

时间:2014-04-14 10:22:23

标签: mysql ruby-on-rails ruby sqlite

我有一个订单数据库,我正在尝试向其添加两个新字段

1)seller_id 2)buyer_id

当我运行命令

rails生成迁移AddFieldstoOrders buyer_id:整数seller_id:整数

显示

 invoke  active_record
      create    db/migrate/20140414094632_add_fieldsto_orders.rb 

运行rake dd:migrate和rails后显示

== 20140414094632 AddFieldstoOrders:迁移================================ == 20140414094632 AddFieldstoOrders:migrated(0.0000s)=======================

它应该给我Seller_id表和buyer_id表。我通过sqlite数据库模型查看器仔细检查了订单数据库模型,并且两个字段都没有出现

这两个字段已添加到我的user.rb和order.rb模型

user.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

   validates :name, presence: true

   has_many :listings, dependent: :destroy
   has_many :sales, class_name: "Order", foreign_key: "seller_id"
   has_many :purchases, class_name: "Order", foreign_key: "buyer_id"
end

order.rb

class Order < ActiveRecord::Base
    validates :address, :city, :state, presence: true

    belongs_to :listing
    belongs_to :buyer, class_name: "User"
    belongs_to :seller, class_name: "User"
end

我已成功将订单ID添加到订单数据库中 rails生成迁移AddListingIdToOrders listing_id:整数但现在我无法添加seller_id和buyer_id字段

迁移文件

class AddFieldstoOrders < ActiveRecord::Migration
  def change
  end
end

2 个答案:

答案 0 :(得分:3)

应该是:

rails generate migration AddFieldsToOrders buyer_id:integer seller_id:integer

你有AddFieldstoOrders,应该是AddFieldsToOrders

所以现在你有两个选择。

选项1

  1. 回滚上一次迁移,即rake db:rollback
  2. 删除它。
  3. 再次运行命令,即

    rails generate migration AddFieldsToOrders buyer_id:integer seller_id:integer 
    

    选项2

    1. 回滚上一次迁移,即rake db:rollback
    2. 编辑迁移,即

      add_column:orders,:buyer_id,:integer

      add_column:orders,:seller_id,:integer

答案 1 :(得分:2)

如果没有看到实际的迁移文件:db/migrate/20140414094632_add_fieldsto_orders.rb,则问题在于t上的小写toOrders

您应该运行的命令是:

rails generate migration AddFieldsToOrders buyer_id:integer seller_id:integer

会生成一个迁移文件db/migrate/20140414094632_add_fields_to_orders.rb(请注意额外的下划线)

您应该执行以下操作来解决此问题:

rake db:rollback
rails generate migration AddFieldsToOrders buyer_id:integer seller_id:integer
rake db:migrate

然后删除原来的db/migrate/20140414094632_add_fieldsto_orders.rb 。回滚只是输入数据库中的schema_migrations表,使其更清晰。