我有三个型号;网络,列表和记录。
我正在尝试编写方法,在网络模型中概念性地说'如果此网络有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
答案 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?
}