Ruby on rails 是否可以自定义外键以使用正则表达式
我们有一个简单的项目和订单模型Ruby on rails 是否可以自定义外键以使用正则表达式,ruby-on-rails,ruby,regex,postgresql,activerecord,Ruby On Rails,Ruby,Regex,Postgresql,Activerecord,我们有一个简单的项目和订单模型 orders(url) items(title, orders_count) 其中“url”可以是来自web的任何url,例如。我们想做的是,如果用户为“url”输入“/items/7”,那么它的行为就像一个外键。比如: class Order < ActiveRecord::Base belongs_to :item, :foreign_key => :url, :regex => /items/n,
orders(url)
items(title, orders_count)
其中“url”可以是来自web的任何url,例如。我们想做的是,如果用户为“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
类顺序:url,:regex=>/items/n,
:counter_cache=>true
结束
类项:url,:regex=>/items/n,
:dependent=>:destroy
结束
这可能吗?我们使用的是Rails 2.3.8、Ruby 1.9.3和Postgresql 9.1。不,不可能添加一个正则表达式匹配的函数,也不可能添加除简单等式以外的任何函数。参见PostgreSQL 您可以执行以下任一操作:
- 在PL/PgSQL中编写一个命令来强制执行所需的约束
- 拆分要在应用程序中使用regexp添加约束的部分,并在仅包含该部分的列上定义外键约束;或
- 在插入或更新之前使用
在插入行时触发在PL/PgSQL中拆分感兴趣的部分,并将感兴趣的部分添加到仅包含该部分的外键列中。应用程序不需要知道复制的情况,因为DB正在幕后处理它。。。对于每一行
可序列化的
事务进行自动保护,使其免受竞争条件的影响。