ruby-on-rails - 是否可以自定义外键以使用正则表达式

标签 ruby-on-rails ruby regex postgresql activerecord

我们有一个简单的商品和订单模型。

orders(url)
items(title, orders_count)

“url”可以是来自网络的任何 URL,例如http://amzn.to/aCKiXO .我们想要做的是,如果用户为“url”输入“/items/7”,那么它的行为就像一个外键。所以像这样:

class Order < ActiveRecord::Base
  belongs_to :item, :foreign_key => :url, :regex => /items/n, 
                    :counter_cache => true
end

class Item < ActiveRecord::Base
  has_many :orders, :foreign_key => :url, :regex => /items/n, 
                    :dependent => :destroy
end

这可能吗?我们在 Rails 2.3.8、Ruby 1.9.3 和 Postgresql 9.1 上

最佳答案

不,不可能添加 foreign key constraint执行正则表达式匹配 - 或除了简单相等之外的任何内容。请参阅 PostgreSQL documentation on constraints .

可以做的是:

  • 写一个constraint trigger在 PL/PgSQL 中执行您想要的约束;

  • 拆分出要在应用程序中使用正则表达式添加约束的部分,并在仅包含该部分的列上定义外键约束;或者

  • 使用 BEFORE INSERT OR UPDATE ... FOR EACH ROW 触发器在插入行时在 PL/PgSQL 中拆分出感兴趣的部分,并将感兴趣的部分添加到仅包含该部分的外键列。应用不需要知道重复,因为数据库在幕后处理它。

关于ruby-on-rails - 是否可以自定义外键以使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12016860/

相关文章:

sql - Rails 4 按 has_many 计数排序

Ruby - 如何使用 "self"方法访问类中的实例变量?

ruby-on-rails - 特殊字符的验证

ruby-on-rails - 从文件列表中,为 dynatree 动态创建哈希数组

ruby-on-rails - Resque:我如何只对一个特定的队列使用特定的工作人员

python - $gme 或 gme 的正则表达式在 python 中前后有空格或没有空格

java - Matcher.find() 如何工作

javascript - 多次使用否定前瞻(或用 ^ 匹配多个字符)?

javascript - 使用 Cocoon Rails 动态生成嵌套形式

ruby - 使用正则表达式获取字符串中的一些元素