gpt4 book ai didi

ruby - Rails 在迁移之间共享代码(又名关注点)

转载 作者:数据小太阳 更新时间:2023-10-29 07:25:31 27 4
gpt4 key购买 nike

我在相同的助手中进行了一些迁移

  private

def add_earthdistance_index table_name, options = {}
execute "CREATE INDEX %s_earthdistance_ix ON %s USING gist (ll_to_earth(%s, %s));" %
[table_name, table_name, 'latitude', 'longitude']
end

def remove_earthdistance_index table_name
execute "DROP INDEX %s_earthdistance_ix;" % [table_name]
end

而且我尽量避免每次都复制粘贴它们。有没有办法在不猴子修补基类的情况下在迁移之间共享代码?我想为模型找到类似 concerns 的东西。

最佳答案

解决方案

添加 config.autoload_paths += Dir["#{config.root}/db/migrate/concerns/**/"]config/application.rb

创建 db/migrate/concerns/earthdistanceable.rb 文件

module Earthdistanceable
extend ActiveSupport::Concern

def add_earthdistance_index table_name, options = {}
execute "CREATE INDEX %s_earthdistance_ix ON %s USING gist (ll_to_earth(%s, %s));" %
[table_name, table_name, 'latitude', 'longitude']
end

def remove_earthdistance_index table_name
execute "DROP INDEX %s_earthdistance_ix;" % [table_name]
end

end

使用它:

class CreateRequests < ActiveRecord::Migration[5.0]
include Earthdistanceable

def up
...
add_earthdistance_index :requests
end

def down
remove_earthdistance_index :requests

drop_table :requests
end

end

关于ruby - Rails 在迁移之间共享代码(又名关注点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38173699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com