我有一個Transaction
模型,其中from_owner
是多態的,因爲交易可能來自其他幾個模型。Rails belongs_to在原始表上的條件
class Transaction < ActiveRecord::Base
belongs_to :from_owner, polymorphic: true
end
我試圖設立時from_owner_type
爲特定值的特定belongs_to
:
belongs_to :from_person,
conditions: ['from_owner_type = ?', Person.name],
class_name: Person,
foreign_key: 'from_owner_id'
我現在遇到的問題是,conditions
似乎是Person
而不是Transaction
。所以,我得到了下面的SQL錯誤試圖調用from_person
上Transaction
:
的ActiveRecord :: StatementInvalid:SQLite3的::的SQLException:沒有這樣的列:from_owner_type:選擇 「人」 * FROM 「人」 WHERE「的人。 」。 「ID」= 1 AND(from_owner_type = '人')LIMIT 1
我想要的是from_person
在Transaction
返回nil
如果Transaction
from_owner_type
不Person
,否則返回相關Person
。我可以設置一個自定義的from_person
方法,但我認爲這可能是一個belongs_to
。我想要在CanCan條件下使用它。我正在使用Rails 3.
你只是想把它當作一個單獨的方法來訪問所有者(如果它是一個Person),而不是實際上是一個單獨的關聯?在這種情況下,似乎自定義方法會比試圖彎曲'belongs_to'來做別的事情更好的選擇。是否有一個特定的原因,你不想使用自定義方法? – 2013-04-04 22:20:48
我希望在CanCan中定義一個像'can:read,Transaction,from_person:{profile_id:profile.id}'這樣的能力,我認爲這需要一種關係,而不僅僅是一種方法。我想我必須用不同的方式來完成我的定義,使用範圍和塊,所以這個問題可以通過「定義實例方法」來得到最好的回答。 – 2013-04-04 22:22:38
當在CanCan中設置條件散列時,需要使用數據庫列([參見CanCan wiki](https://github.com/ryanb/cancan/wiki/Defining-Abilities#hash-of-條件)),所以我懷疑你的方法可能無法正常工作。你能不能在部分條件中加上類名檢查? – 2013-04-04 22:33:00