【问题标题】:In Ruby on Rails ActiveRecord, how to make an empty ActiveRecord::Relation object and copy a record from another ActiveRecord::Relation object (full)? [duplicate]在 Ruby on Rails ActiveRecord 中,如何创建一个空的 ActiveRecord::Relation 对象并从另一个 ActiveRecord::Relation 对象(完整)复制记录? [复制]
【发布时间】:2014-07-01 19:25:08
【问题描述】:

我有一个 ActiveRecord 对象 (x),其中包含一些记录。

首先,我想创建一个空记录集 (y)。类似的东西:

y = x.class.new  EDIT: -or- y = ActiveRecord::Relation.new

其次,我想将记录从 x 复制(复制)到 y。类似的东西:

y << x.first.dup

我该怎么做? (有可能吗?)

我在第一行有一个错误,说缺少一个参数。我可以使用此方法创建新字符串,但不能使用 ActiveRecord 对象。

# x.class : ActiveRecord::Relation::ActiveRecord_Relation_Analysis
x = Analysis.where(category: 6) 

# In a helper ...
# The x object is not always an Analysis.  So I must use its class 
y = x.class.new 

最后一行出错:

ArgumentError: wrong number of arguments (0 for 1+)
        from .. /activerecord-4.0.1/lib/active_record/relation/delegation.rb:76:in `new'

【问题讨论】:

  • 可以在同一问题的回答中找到答案stackoverflow.com/questions/60033/…
  • xActiveRecord::Relation 对象吗? IE。 xActiveRecord 查询的结果,例如 Post.where(...)?
  • @p11y 是的。它实际上是一个 ActiveRecord::Relation,是对数据库的查询结果。
  • 不完全是。我查看了问题stackoverflow.com/questions/60033/… 及其所有答案。我没有找到如何创建空集。我只想从一个空的集合中复制几条记录。

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


【解决方案1】:

假设您有一个 ActiveRecord 模型 Model,以及从之前的查询获得的记录集合 x,其类型为 ActivRecord::Relation。然后你可以这样复制整个列表:

y = x.map(&:dup)

请注意,这会将 id 属性设置为 nil,您仍然需要 create 将记录保存到数据库中:

y.map(&:save)

或一口气:

x.each do |record|
  record.dup.save
end

如果您只想克隆一条记录,则不需要将集合包裹起来,您可以这样做:

clone = x.first.dup
clone.save

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多