关于rails generate migrate 修改字段类型

有几种写法,最早就是add remove了

class AddSsl < ActiveRecord::Migration
def up
add_column :accounts, :ssl_enabled, :boolean, :default => 1
end

def down
remove_column :accounts, :ssl_enabled
end
end


这个有个显著问题,字段值没了。

那么

rails g migration change_date_format_in_my_table


class ChangeDateFormatInMyTable < ActiveRecord::Migration
def self.up
change_column :my_table, :my_column, :datetime
end

def self.down
change_column :my_table, :my_column, :date
end
end



或者


change_table :table_name do |t|
t.change :column_name, :column_type, {options}
end


class ChangeDataTypeForWidgetCount < ActiveRecord::Migration
def self.up
change_table :widgets do |t|
t.change :count, :float
end
end

def self.down
change_table :widgets do |t|
t.change :count, :integer
end
end
end



还有一些


rename_column(table_name, column_name, new_column_name)



add_index(table_name, column_names, options)
add_index(:suppliers, :name)

#生成

CREATE INDEX suppliers_name_index ON suppliers(name)
add_index(:accounts, [:branch_id, :party_id], :unique => true)

#生成
CREATE UNIQUE INDEX accounts_branch_id_party_id_index ON accounts(branch_id, party_id)

add_index(:accounts, [:branch_id, :party_id], :unique => true, :name => 'by_branch_party')


#生成

CREATE UNIQUE INDEX by_branch_party ON accounts(branch_id, party_id)






class MakeJoinUnique < ActiveRecord::Migration
def up
execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)"
end

def down
execute "ALTER TABLE `pages_linked_pages` DROP INDEX `page_id_linked_page_id`"
end
end
class AddPeopleSalary < ActiveRecord::Migration
def up
add_column :people, :salary, :integer
Person.reset_column_information
Person.find(:all).each do |p|
p.update_attribute :salary, SalaryCalculator.compute(p)
end
end
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值