首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails在迁移之间共享代码(也称为关注点)

Rails在迁移之间共享代码(也称为关注点)
EN

Stack Overflow用户
提问于 2016-07-04 03:40:49
回答 2查看 672关注 0票数 4

我在相同的helper中进行了一些迁移。

代码语言:javascript
复制
  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这样的模型。

EN

回答 2

Stack Overflow用户

发布于 2016-07-04 04:23:56

解决方案

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

在其中创建db/migrate/concerns/earthdistanceable.rb文件

代码语言:javascript
复制
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

使用它:

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2016-07-04 03:50:30

我认为你可以这样做:

代码语言:javascript
复制
# lib/helper.rb
module Helper
  def always_used_on_migrations
    'this helps' 
  end
end

迁移

代码语言:javascript
复制
include Helper
class DoStuff < ActiveRecord::Migration
  def self.up
    p always_used_on_migrations
  end

  def self.down
    p always_used_on_migrations
  end
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38173699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档