1

我正在使用 Ruby on Rails 3,并在我的对象类中创建了一些范围,但是当我从我的代码中调用它们时,它返回一个错误:

irb>Transaction.first.committed

=> 未定义的方法 `commited' for #

对象类:

类事务 < ActiveRecord::Base

 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")

结尾

4

2 回答 2

0

您不能在单个 Transaction 对象(实例)上调用范围(类方法)。

你必须这样做:

Transaction.committed

你得到一个ActiveRelation(本质上是一个Array,但你可以在它上面调用其他作用域)。

无论如何,你希望Transaction.first.committed做什么?您将有一个对象,然后您会尝试找到它transaction_type“提交”的位置。您已经拥有该对象,因此您将调用它的#transaction_type方法。

范围将带回所有事务类型为已提交的事务对象。如果您想要一个实例方法来告诉您是否提交了单个对象,那么您必须创建一个实例方法,例如:

def committed?
  transaction_type == "committed"
end

然后你可以写:

Transaction.first.committed? # => true
于 2012-07-05T16:06:52.057 回答
0

Transaction.first将返回一个Transaction对象,因此您无法调用where它。尝试:

Transaction.committed.first
于 2012-07-05T16:08:42.610 回答