레일에 기존 모델이 있으며이 모델에 AASM 상태를 추가하려고합니다.기존 모델에 기본 AASM 상태를 추가하는 방법
내 이해에서 마이그레이션을 통해 내 데이터베이스에 상태 열을 추가 한 다음 일부 상태를 내 레일 모델에 추가해야합니다. 다른 열의 값에 따라 기본 상태 값을 어떻게 설정합니까?
나는 올바른 길을 가고 있습니까?
레일에 기존 모델이 있으며이 모델에 AASM 상태를 추가하려고합니다.기존 모델에 기본 AASM 상태를 추가하는 방법
내 이해에서 마이그레이션을 통해 내 데이터베이스에 상태 열을 추가 한 다음 일부 상태를 내 레일 모델에 추가해야합니다. 다른 열의 값에 따라 기본 상태 값을 어떻게 설정합니까?
나는 올바른 길을 가고 있습니까?
올바른 길을 가고 있습니다. 마이그레이션 자체에서 새 레코드의 초기 상태를 설정할 수 있습니다.
다음과 같이 : default 옵션을 사용하십시오.
# Assuming your model is named Order
class AddStateToOrders < ActiveRecord::Migration
add_column :orders, :state, :string, :default => 'new'
end
아니면 열이 추가 된 후 각 레코드의 상태를 설정하는 루비의 간단한 비트를 사용할 수 있습니다 모든 레코드가 동일한 시작 상태를이 경우에 가장 유용합니다. 레코드의 초기 상태가 무언가에 조건이있는 경우보다 유용합니다.
# 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
피터의 대답은 좋지만 하나의 결함이 있습니다. 기본 상태를 변경하면 새 마이그레이션을 작성해야합니다. 따라서
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
그게 내가 찾고있는 것입니다! 고마워, 피터! – Masha
메모 - 마이그레이션에서 열 유형이 누락 되었습니까? – Masha
당신은 절대적으로 옳습니다. 끝에', : string'을 추가해야합니다. 그러나 이미 끝났다고 확신합니다;) 다른 사람의 답을 편집 할 것입니다. –