【发布时间】:2014-02-27 14:35:23
【问题描述】:
我想删除并返回 AR 关系对象中的第一个元素。我使用了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 应该以相同的方式工作。
【问题讨论】:
-
您能说得更具体些吗?你是如何生成 AR 对象的?它是
where子句吗?您是否希望shift修改底层数据库,或者您只是想在本地操作 AR 记录列表? -
@mbratch 我添加了我的模型代码。
-
太好了。你能回答其他问题吗,因为这很重要。
-
您使用的是什么版本的 Rails?因为 AR 关系对象上的
shift在 Rails 4 中按预期工作。 -
你可以试试
attachment_versions = @attachment.attachment_versions.to_a,然后@current_version = attachment_versions.shift。这假设您只是想在本地对数组进行操作,并且对这种更改底层数据的机制不感兴趣(即,在您执行shift时删除一条记录)。
标签: ruby-on-rails ruby activerecord ruby-on-rails-4