我可以从 Rails 中的另一个模型调用类方法吗?

BHO*_*OLT 1 ruby-on-rails

我试图调用一个类方法(当前是一个作用域),该方法使用其父(或属于)模型中的属性,但似乎无法使其正常工作。

我的模型:

class Venue < ActiveRecord::Base
  attr_accessible :address
  has_many :events, :dependent => :destroy
end

class Event < ActiveRecord::Base
  belongs_to :venue
  scope :is_near, lambda {|city| self(Venue.address).near(city, 20, :units => :km)}
end
Run Code Online (Sandbox Code Playgroud)

我知道语法是错误的,但我认为这说明了我打算做什么。我想获取场地的地址并调用另一个方法。我需要类中的范围Event,以便我可以将其他范围链接在一起。

欣赏任何想法。

dep*_*epa 6

由于#address不是类方法而是实例方法,因此您将无法通过使用范围来执行您想要的操作。

如果您想获取场地 20 公里范围内的所有活动,请创建以下类方法Venue

class Venue < ActiveRecord::Base
  def self.events_near_city(city)
    venues_near_city(city).map(&:events).flatten
  end

  private

  def self.venues_near_city(city)
    near(city, 20, :units => :km)
  end
end
Run Code Online (Sandbox Code Playgroud)

然后通过使用来调用它Venue.events_near_city(session[:city]),因为正如您在聊天中告诉我的那样,您将城市存储在会话中。