我想避免在Rails迁移中出现重复项,如下所示:
def change
store_group = StoreGroup.find_by(name: 'private')
information = store_group.text_blocks.find_by(name: 'information')
information.update!(body: nil)
store_group = StoreGroup.find_by(name: 'reference_account')
information = store_group.text_blocks.find_by(name: 'information')
information.update!(body: nil)
company_data = StoreGroup.find_by(name: 'company_data')
company_data.update!(subtitle: 'some title')
reference_account = StoreGroup.find_by(name: 'reference_account')
reference_account.update!(subtitle: 'some big title')
end
我已经创建了这样的东西:
STORE_GROUPS = %w[company_data reference_account]
GROUP_NAMES = %w[private reference_account]
def change
GROUP_NAMES.each do |group_name|
store_group = StoreGroup.find_by(name: group_name)
information = store_group.text_blocks.find_by(name: 'information')
information.update!(body: nil)
end
STORE_GROUPS.each do |store_group_name|
if store_group_name == 'company_data'
company_data = StoreGroup.find_by(name: store_group_name)
company_data.update!(subtitle: 'some title')
else
company_data = StoreGroup.find_by(name: store_group_name)
reference_account.update!(subtitle: 'some big title')
end
end
end
但是我认为这不是一种非常有效的方法,有没有更好的方法呢?
答案 0 :(得分:2)
STORE_GROUPS = %w[company_data reference_account private reference_account]
StoreGroup.where(name: STORE_GROUPS).each do |st|
case st.name
when 'company_data'
st.update!(subtitle: 'some title')
when 'reference_account'
st.update!(subtitle: 'some big title')
else
information = st.text_blocks.find_by(name: 'information')
information.update!(body: nil)
end
end