加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 我可以在Ruby on Rails上编写PostgreSQL函数吗

发布时间:2020-12-16 20:56:17 所属栏目:百科 来源:网络整理
导读:我们正在开始一个基于Ruby on Rails的项目.我们曾经使用Perl和PostgreSQL函数,并且使用Rails和Active Record我还没有看到我们应该如何在PostgreSQL中创建函数并使用Active Record和模型保存记录. 我知道我们可以在PostgreSQL中手动创建它,但Active Record的
我们正在开始一个基于Ruby on Rails的项目.我们曾经使用Perl和PostgreSQL函数,并且使用Rails和Active Record我还没有看到我们应该如何在PostgreSQL中创建函数并使用Active Record和模型保存记录.

我知道我们可以在PostgreSQL中手动创建它,但Active Record的“魔力”在于可以使用所有模型重新创建数据库.

有没有办法使用Rails创建PostgreSQL函数并将其保存在模型中?

解决方法

这部分问题:

I know we can create it manually in PostgreSQL,but the “magic” with Active Record is that the database can be recreated with all the models.

告诉我你正在寻找一种方法将PostgreSQL函数与普通的Rails迁移过程和Rake任务集成,例如db:schema:load.

在迁移中添加和删除功能很简单:

def up
  connection.execute(%q{
    create or replace function ...
  })
end

def down
  connection.execute(%q{
    drop function ...
  })
end

您需要使用单独的向上和向下方法而不是单个更改方法,因为ActiveRecord将不知道如何应用更不用说反向创建函数.并使用connection.execute将原始函数定义提供给PostgreSQL.

但是,schema.rb和使用schema.rb的常用Rake任务(例如db:schema:load和db:schema:dump)将不知道如何处理PostgreSQL函数以及ActiveRecord不理解的其他内容.虽然有一种方法,你可以选择使用structure.sql文件而不是schema.rb设置:

config.active_record.schema_format = :sql

在您的config / application.rb文件中.之后,db:migrate将编写db / structure.sql文件(这只是没有数据的PostgreSQL数据库的原始SQL转储)而不是db / schema.rb.您还将使用不同的Rake任务来处理structure.sql:

> db:structure:dump而不是db:schema:dump
> db:structure:load而不是db:schema:load

其他一切都应该是一样的.

这种方法还允许您使用ActiveRecord无法理解的数据库中的其他内容:CHECK约束,触发器,非简单列默认值,…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读