我有一个Transaction
模型,其中from_owner
是多态的,因为交易可能来自其他几个模型。
class Transaction < ActiveRecord::Base
belongs_to :from_owner, polymorphic: true
end
我正在尝试为belongs_to
特定值时设置特定的from_owner_type
:
belongs_to :from_person,
conditions: ['from_owner_type = ?', Person.name],
class_name: Person,
foreign_key: 'from_owner_id'
我遇到的问题是conditions
似乎是Person
而不是Transaction
。因此,我尝试在from_person
上调用Transaction
时出现以下SQL错误:
ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:没有这样的列:from_owner_type:SELECT“people”。* FROM“people”WHERE“people”。“id”= 1 AND(from_owner_type ='Person')LIMIT 1 < / p>
如果from_person
Transaction
不是nil
,我希望Transaction
from_owner_type
上的Person
返回Person
,否则返回相关的from_person
。我可以设置一个自定义的belongs_to
方法来执行此操作,但我认为它可能是{{1}}。我想在CanCan条件下使用它。我正在使用Rails 3。
答案 0 :(得分:0)
根据您的评论,似乎这样做的目的是能够设置一个CanCan规则,允许用户:read
任何Transactions
他们是其所有者,对吗?您应该可以使用以下规则执行此操作:
can :read, Transaction, from_owner_id: profile.id, from_owner_type: Person.name
这应该意味着您根本不需要打扰任何与Transaction
模型混淆的东西。 (我没有对此进行测试,但理论应该是正确的,即使语法不完全存在。例如,我不确定profile.id
来自哪里。)