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

时间:2016-02-16 16:17:20

标签: ruby-on-rails-3.2

我有一个可以包含几个Betas的Alpha。我想只过滤掉那些不包含任何Betas的Alpha(因此是空的Alphas)。所以我在Alpha中创建了一个类方法,并尝试在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

似乎我在这里缺少基本的,我会感激任何帮助!

1 个答案:

答案 0 :(得分:0)

_empty是一个实例方法,它将返回当前实例的值,但它不是适用于Alpha的全局方法

所以你可能想要添加一个类方法......

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

请注意,至少有两种方法可以定义类方法...方法名称中包含self ...

 def self._empty

......或......

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

仅定义未经修饰的方法使其成为实例方法(例如@my_alpha._empty