Rails belongs_to,包含起始表的条件

时间:2013-04-04 22:08:36

标签: ruby-on-rails ruby-on-rails-3 activerecord cancan belongs-to

我有一个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。

1 个答案:

答案 0 :(得分:0)

根据您的评论,似乎这样做的目的是能够设置一个CanCan规则,允许用户:read任何Transactions他们是其所有者,对吗?您应该可以使用以下规则执行此操作:

can :read, Transaction, from_owner_id: profile.id, from_owner_type: Person.name

这应该意味着您根本不需要打扰任何与Transaction模型混淆的东西。 (我没有对此进行测试,但理论应该是正确的,即使语法不完全存在。例如,我不确定profile.id来自哪里。)