避免迁移中出现重复

时间:2019-11-14 12:44:25

标签: ruby-on-rails ruby

我想避免在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

但是我认为这不是一种非常有效的方法,有没有更好的方法呢?

1 个答案:

答案 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