Ruby on rails 在Ruby中转换只有一个对象的数组

Ruby on rails 在Ruby中转换只有一个对象的数组,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,假设我有一个数组,我使用keep\u if或select方法删除数组中除一个对象以外的所有对象--有没有办法将该对象从数组中删除,使其不再是数组 例如,我的模型的设置方式,previous和current将只有一个对象 def more_or_less?(project, current_day) words = project.words current = words.select {|w| w.wrote_on == current_day} previous =

假设我有一个数组,我使用
keep\u if
select
方法删除数组中除一个对象以外的所有对象--有没有办法将该对象从数组中删除,使其不再是数组

例如,我的模型的设置方式,
previous
current
将只有一个对象

 def more_or_less?(project, current_day)
    words = project.words
    current = words.select {|w| w.wrote_on == current_day}
    previous = words.select {|w| w.wrote_on == (current_day - 1.day)}
 end

所以,如果我想做一个比较,比如
if current.quantity>previous.quantity
——我已经求助于实际编写if
current.last.quantity>previous.last.quantity
,但我假设有一种更惯用的方法?

如果你删除了一个条目,为什么不选择你关心的一件事呢?大概是这样的:

def more_or_less?(project, current_day)
  words    = project.words
  current  = words.find { |w| w.wrote_on == current_day }
  previous = words.find { |w| w.wrote_on == (current_day - 1.day) }
  if current.quantity > previous.quantity
    #...
  end
end
如果您在ActiveRecord land,那么您可以使用derp所说的或
来获得一个普通数组,您可以在以下位置使用
查找

def more_or_less?(project, current_day)
  words    = project.words
  current  = words.detect    { |w| w.wrote_on == current_day }
  previous = words.to_a.find { |w| w.wrote_on == (current_day - 1.day) }
  if current.quantity > previous.quantity
    #...
  end
end

detect是find的别名,也许可以用

不,这就是我要找的。我不知道为什么我没有想到find会起作用。事实上,我在一个Rails项目中,所以当我使用
find
时,它在寻找主键。那么
单词是什么?它是单个ActiveRecord对象吗?Word是一个数组(project有\u many=>:words),这就是为什么我首先要从中选择它。