小编Bel*_*lly的帖子

如何在 ActiveRecord 中使用默认的 sql 表达式?

我正在尝试为 rails 中的模型使用默认值。我见过的最好的记录方法是在迁移中使用 :default 参数。但是,看起来这仅适用于值。我正在尝试设置默认表达式,特别是 currval('customers_id_seq'::regclass). 我可以手动添加默认表达式,但我不知道如何告诉 rails 使用默认值。创建模型对象时如何使用此默认值?

编辑 这是一个更具体的例子:

class CreateTestmodels < ActiveRecord::Migration
  def up
    create_table :testmodels do |t|
      t.integer :idxfield, :null=>false
      t.string :datafield
      t.timestamps

    end
    execute("ALTER TABLE testmodels ALTER COLUMN idxfield SET DEFAULT currval('testmodels_id_seq'::regclass)")
  end

  def down
    drop_table :testmodels
  end
end
Run Code Online (Sandbox Code Playgroud)

通过此迁移,我可以运行insert into testmodels (datafield) VALUES ('sometestdata');,这将向表中添加一行,其中idxfield默认为id

但是,如果我Testmodel.create(:datafield=>"testdata")从 rails 控制台运行,它会替换为 nullidxfield并引发异常。

ruby activerecord ruby-on-rails ruby-on-rails-3

5
推荐指数
1
解决办法
682
查看次数

使用Rails和Postgresql处理'text'字段中的空字符

我最近在我的rails应用程序上进行了一系列测试,其中包含各种输入,我发现了传入请求中的空字符如何处理的问题.我的应用程序由Postgresql 8.4数据库支持.事实证明,Postgresql不支持在标准"text"或"varchar"字段中存储空字符.但是,当我尝试通过rails存储其中包含空字符的字符串时,默认行为似乎是在空字符后截断字符串.我认为这是一个问题,因为在截断发生之前验证了字符串.可以通过插入空字符来绕过诸如长度之类的事物的验证,因为ruby可以完美地处理它们并且截断仅发生在插入上.

我正试图找出处理这些输入的最佳方法.对我来说理想的行为就是在处理无效的UTF-8字节时抛出异常.现在,我能想到的唯一选择是显式检查每个输入字符串是否为空字符.我宁愿采用一种通用方法,但我不确定在哪里开始寻找.修补postgresql适配器来检查这是一个选项吗?还是有一些我一直缺少的标准方法?

ruby-on-rails utf

5
推荐指数
0
解决办法
1542
查看次数

标签 统计

ruby-on-rails ×2

activerecord ×1

ruby ×1

ruby-on-rails-3 ×1

utf ×1