Rails在类方法

时间:2015-06-19 10:10:26

标签: ruby-on-rails ruby

students = Student.limit(3)
students.approve()

def self.approve
    # ...
end

我想让学生使用each_with_index,但它失败了。 我试过自己,它指出

"NoMethodError: undefined method `each_with_index' for #<Class:0x00000007a1b920>".

我只想在我方法前面的对象,我怎么能这样做,谢谢!

1 个答案:

答案 0 :(得分:2)

approve方法中,您有一个ActiveRecord :: Relation,但您需要一个数组:

def self.approve_all
  all.each_with_index do |user, index|
    ...
  end
end

ActiveRecord模型中的类方法不仅可以在类本身上调用,还可以在ActiveRecord :: Relation对象上调用。

例如,我们不仅可以直接在类.approve_all上调用Student.approve_all方法,还可以调用Student类的任何关系:Student.order(name: :asc).limit(10).where(state: "not_approved").approve_all < / p>

但我认为该方法至少应该命名为update_all,我会尝试为这个问题找到更好的解决方案。