在 Rails3.2 的视图中使用 class 方法时出错

error using class method in views in Rails3.2

我有一个可以包含多个 Beta 的 Alpha。我只想过滤还不包含任何 Beta 的 Alpha(因此是空的 Alpha)。所以我在 Alpha 中创建了一个 class 方法,并尝试在 Beta 视图中的表单中使用它。

class Beta
    belongs_to :alpha
end

class Alpha
    has_many :betas

    def _empty
        return self if self.betas.nil?
    end
end

#views/betas/form.haml:

=simple_form_for @beta do |f|
    f.association :alpha, collection: Alpha._empty

这是我得到的错误:

undefined method '_empty' for #Class:0x0000000551ae50

看来我缺少一些基本知识,如果有任何帮助,我将不胜感激!

_empty 是一个实例方法并将 return 当前实例的值,但它不是适用于 Alpha

的全局方法

因此您可能想要添加一个 class 方法...

def self._empty
  Alpha.includes(:betas).where( :betas => { :alpha_id => nil } )
end

请注意,至少有两种方法可以定义 class 方法...在方法名称中使用 self...

 def self._empty

...或...

class Alpha
  class << self
    def _empty
      ...
    end
  end
end

只需简单地定义方法即可使其成为实例方法(例如@my_alpha._empty