我在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')"
发布于 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。
发布于 2014-08-07 08:02:25
我想这是
Banking::PaymentToken.find_by(type: 'Banking::PaymentToken', 'other_type')应该转换为所需的等效SQL。
请记住,type列是受限制的词。因此,您必须知道在使用这个列名时要做什么。
发布于 2014-08-07 08:19:28
弄明白了:我需要创建另一个部分来继承表单PaymentToken Banking::OtherToken < Banking::PaymentToken
这将给我提供所需的查询。
https://stackoverflow.com/questions/25176868
复制相似问题