我在rails中有一个现有的模型,我想向它添加AASM状态。
根据我的理解,我应该首先通过迁移向我的数据库添加一个状态列,然后将一些状态添加到我的rails模型中。如何根据另一列中的值设置默认状态值?
我是否在正确的轨道上?
答案 0 :(得分:5)
你走在正确的轨道上。您可以在迁移本身中为新记录设置初始状态。
使用:default选项,如下所示。如果每条记录具有完全相同的起始状态,则此功能非常有用:
# Assuming your model is named Order
class AddStateToOrders < ActiveRecord::Migration
add_column :orders, :state, :string, :default => 'new'
end
或者,您可以使用简单的ruby位来添加列后设置每个记录的状态。如果记录的初始状态是以某种为条件的,则更有用。
# Still assuming your model is named Order
class AddStateToOrders < ActiveRecord::Migration
add_column :orders, :state, :string
# Loop through all the orders, find out whether it was paid and set the state accordingly
Order.all.each do |order|
if order.paid_on.blank?
order.state = 'new'
else
order.state = 'paid'
end
order.save
end
end
答案 1 :(得分:1)
class AddStateToOrders < ActiveRecord::Migration
def self.up
add_column :orders, :state, :string
Order.update_all(aasm_state: 'new') # it will apply just for existing records with empty state.
end
def self.down
remove_column :orders, :state
end
end