引用模型以在另一个模型中定义方法

时间:2015-09-19 14:24:16

标签: ruby-on-rails ruby ruby-on-rails-4

我有三个型号;网络,列表和记录。

我正在尝试编写方法,在网络模型中概念性地说'如果此网络有recs ...',并且在List模型中'如果此列表有recs ...'。

更新:我在self.recs.presence行上的网络模型中出现错误:“网络的未定义方法`recs'(id:integer,name:string):Class”

网络模型

class Network < ActiveRecord::Base
  has_many :recs, through: :lists
  has_many :lists

  def self.network_with_recs
    self.recs.presence
  end
end

列表模型

class List < ActiveRecord::Base
  has_many :recs
  belongs_to :network

  def self.list_with_recs
    self.recs.presence
  end
end

Recs Model

class Rec < ActiveRecord::Base
  belongs_to :network, through: :lists
  belongs_to :list
end

控制器

  def index
    @recs = Rec.to_do
    @lists = List.all
    @networks = Network.network_with_recs.all
  end

3 个答案:

答案 0 :(得分:1)

您正在 上调用 实例方法 ,例如@networks = Network.network_with_recs.all。如果你想这样称呼它,那么你应该把它作为 类方法 。并且没有present,如果我没错,你应该将其设为presence

def self.network_with_recs
  self.recs.presence
end

答案 1 :(得分:1)

我会猜测:

<强> list.rb 您必须使用self

添加类方法
def self.network_with_recs
  recs = joins(:recs)
  if recs.present?
     all
  else
     nil
  end
end

<强>控制器 删除对象方法.all

def index
  @recs = Rec.to_do
  @lists = List.all
  @networks = Network.network_with_recs
end

答案 2 :(得分:0)

正如翻译员正确说明:活动记录关系中没有方法present - 也许您想要致电present? - 对于Enumerables,您可以使用更明确的any? }