我有一个类设备,它有一个方法来确定对象是否可用。 这个方法有一些逻辑来检查思想是否有一个has_many关联,并返回true或false,因此,它只适用于实例化对象。
有一些方法可以做:
@someVar = Equipament.all.available
我解决了这个问题:
equipament.rb
has_many :rents
def available
if(self.rents.blank?)
return true
else
if(self.rents.last.end.blank?)
return false
else
return true
end
end
end
def self.usable
ary = Array.new
Equipament.all.each do |eq|
if eq.available
ary.push(eq)
end
end
return ary
end
然后
@someVar = Equipament.usable
但是,这是一种不错的方式还是有更高效/优雅的东西?
答案 0 :(得分:1)
除了您的代码可能进行的无限数据库查询之外,整个方法并不灵活。除了available
之外,rents
除了available
之外还有许多其他原因。例如,它可能在维护中。这意味着使state
方法更加复杂。因此,我认为为Equipment
定义Equipment.state
将更容易维护。您可以根据特定事件更改Equipment.state
。在您的情况下,您可以在有人租用时将rented
更改为available
,并在返回时将其更改回# models/equipament.rb
def self.available
where(state: :available)
end
。您现在不仅可以涵盖更多案例,而且您还可以使用一种简单的方法获取所有可用设备的列表,该方法仅向数据库发出一个查询:
{{1}}
答案 1 :(得分:0)
这应该可以解决问题
equipament.rb
has_many :rents
def available
(self.rents.blank? && !self.rents.last.end.blank?) ? true : false
end
def self.usable
ary = Array.new
Equipament.all.each do |eq|
if eq.available
ary.push(eq)
end
end
return ary
end