Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails:获取具有某些条件的所有对象_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 4 Rails:获取具有某些条件的所有对象

Ruby on rails 4 Rails:获取具有某些条件的所有对象,ruby-on-rails-4,Ruby On Rails 4,我有一个类设备,它有一个确定对象是否可用的方法。 这个方法有一些逻辑来检查a是否有很多关联,并返回true或false,因此,它只在实例化的对象中工作 有一些方法可以做如下事情: @someVar = Equipament.all.available 我解决了这个问题: equipament.rb has_many :rents def available if(self.rents.blank?) return true else if(self

我有一个类设备,它有一个确定对象是否可用的方法。 这个方法有一些逻辑来检查a是否有很多关联,并返回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

但是,这是一种很好的方法还是有更高效/优雅的方法?

除了代码可能进行的无限数据库查询之外,整个方法并不灵活。除了
租金
之外,
设备
不可用还有许多其他原因。例如,它可能在维护中。这意味着使
方法变得更加复杂。因此,我认为为
设备定义
状态
会更容易维护。您将根据某些事件更改设备状态。在您的情况下,您可以在有人租用时将
设备.state
更改为
租用的
,并在归还时将其更改回
可用的
。现在,您不仅可以涵盖更多的案例,还可以通过一种简单的方法获取所有可用设备的列表,该方法只需向数据库发出一个查询:

# models/equipament.rb

def self.available
  where(state: :available)
end

这应该能奏效

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

但是它需要数据库中的另一个字段,我必须正确地维护它,对吗?@Techmago因为我不知道你案件的全部背景,所以不可能做出明智的意见。然而,总的来说,在数据库中维护一个额外的字段似乎是一个合理的权衡。是的,我认为最终,这将是最好的选择。我总是尽一切努力减少数据库中字段的数量。。。我发现最好的选择是使用状态机gem来处理这些状态,这允许我以后添加更多的状态