首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails ActiveRecord型约束

Rails ActiveRecord型约束
EN

Stack Overflow用户
提问于 2014-08-07 07:44:10
回答 3查看 62关注 0票数 1

我在rails应用程序class Banking::PaymentToken < Banking::Token (which is ActiveRecord)中有以下模型

Banking::PaymentToken.find()包含以下的SQL约束?

"WHERE payment_tokens.type IN ('Banking::PaymentToken')"

我想添加约束"WHERE payment_tokens.type IN ('Banking::PaymentToken', 'other_type')"

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-07 08:42:21

这就是ActiveRecord实现继承的方式。

Banking::Token < ActiveRecord::Base是处理payment_tokens表(所有记录)的基类。这意味着从BankingToken中进行的任何选择都将针对payment_tokens表中的所有记录进行筛选。

Banking::PaymentToken < Banking::Token继承自Banking::Token,这意味着它对相同的表工作,但默认情况下只筛选type = "Banking::PaymentToken",(类型是活动记录的默认inheritance_column )。

您希望创建一个继承自Banking::PaymentToken的新类,让我们说:Banking:OtherToken < Banking::PaymentToken作为该机制的工作机制,在默认情况下它将在其中过滤("Banking:OtherToken")。

现在,Banking::PaymentToken过滤器默认为:type in ("Banking::PaymentToken", "Banking:OtherToken"),因为每个OtherToken都是PaymentToken

票数 2
EN

Stack Overflow用户

发布于 2014-08-07 08:02:25

我想这是

代码语言:javascript
复制
Banking::PaymentToken.find_by(type: 'Banking::PaymentToken', 'other_type')

应该转换为所需的等效SQL。

请记住,type列是受限制的词。因此,您必须知道在使用这个列名时要做什么。

票数 0
EN

Stack Overflow用户

发布于 2014-08-07 08:19:28

弄明白了:我需要创建另一个部分来继承表单PaymentToken Banking::OtherToken < Banking::PaymentToken

这将给我提供所需的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25176868

复制
相关文章

相似问题

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