如何删除并返回ActiveRecord关系对象中的第一个元素?

时间:2014-02-27 14:35:24

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

我想删除并返回AR关系对象中的第一个元素。我使用了shift,但它没有移除对象。

使用普通数组,shift按预期工作:

a = [1, 2, 3]
a.shift # => 1
a # => [2, 3]

这不起作用。变量@attachment_versions在使用shift之前和之后保留相同的大小。

@attachment = Attachment.with_associations.find(params[:id])
@attachment_versions = @attachment.attachment_versions
@current_version = @attachment_versions.shift

# this raises `true`
raise @attachment_versions.include?(@current_version).to_s

def self.with_associations
  includes(attachment_versions: :owner, comments: [:author, :attachments])
end

我知道AR关系对象不仅仅是一个数组,但我认为shift应该以相同的方式工作。

1 个答案:

答案 0 :(得分:2)

你可以很容易地把它变成一个数组。

即。

@attachment_versions_array = @attachment_versions.to_a

@attachment_versions_array.shift
=> <Attachment_version......etc