我正在使用Ruby on Rails 3并且我在我的对象类中创建了一些范围但是当我从我的代码中调用它时它会返回错误:
IRB> Transaction.first.committed
=>对于#
,未定义的方法“提交”
对象类:
class Transaction<的ActiveRecord ::基
attr_accessible :amount, :description, :published, :task_description_id, :discrete_task_id, :transaction_type belongs_to :discrete_task scope :committed, where(:transaction_type => "committed") scope :obligated, where(:transaction_type => "obligated") scope :expensed, where(:transaction_type => "expensed")
端
答案 0 :(得分:0)
您不能在单个Transaction对象(实例)上调用范围(类方法)。
你必须这样做:
Transaction.committed
您返回ActiveRelation
(基本上是Array
,但您可以调用其他范围)。
无论如何,你期望Transaction.first.committed
做什么?你有一个单独的对象,然后你会尝试找到它transaction_type
被“提交”的位置。您已经拥有该对象,因此您可以调用其#transaction_type
方法。
范围将带回所有事务对象,这些对象的事务类型为已提交。如果您想要一个实例方法来告诉您是否提交了单个对象,那么您必须创建一个实例方法,如:
def committed?
transaction_type == "committed"
end
然后你可以写:
Transaction.first.committed? # => true
答案 1 :(得分:0)
Transaction.first
会返回Transaction
个对象,因此您无法在其上调用where
。尝试:
Transaction.committed.first