【问题标题】:Store values from an array in new array将数组中的值存储在新数组中
【发布时间】:2018-12-18 09:21:05
【问题描述】:

我有一个数组prejobs,我想将它的一些元素存储在一个新数组demojobs 中。我尝试了以下代码:

@pre.jobs.map do |job|
    @demojobs = Demojob.new(job)
end
render json: @demojobs

但我收到 undefined method 'stringify_keys' 错误。有什么好的方法来执行此操作吗?

【问题讨论】:

  • 你可以试试render json: @demojsobs.as_json 吗?

标签: ruby-on-rails arrays ruby


【解决方案1】:

假设PrejobDemojob 都是活动记录模型,您应该在构造函数调用中使用attributes。也宁愿使用map 构建一个新数组或附加到它,而不是在每个迭代步骤中为 var 分配一个新值..

@demojobs = @pre.jobs.map do |job|
  Demojob.new(job.attributes.except(:id))
end
render json: @demojobs

编辑:

要添加一些自定义属性,可以将它们合并到哈希中或手动设置它们:

@demojobs = @pre.jobs.map do |job|
  Demojob.new(job.attributes.except(:id).merge(attr1: val1, attr1: val2))
end
render json: @demojobs

@demojobs = @pre.jobs.map do |job|
  Demojob.new(job.attributes.except(:id)).tap do |dj|
    dj.attr1 = val1
    dj.attr2 = val2
  end
end
render json: @demojobs

【讨论】:

  • 感谢您的回答。它将相同的数据从 Prejob 添加到 Demojob 但如果我想在 demojob 活动记录模型中添加一些自定义属性,那么我该怎么办?
  • 更新了答案
【解决方案2】:

我认为你应该这样尝试

@demojobsarray = Array.new
    @pre.jobs.map do |job|
        @demojobsarray.push(job)
    end
@demojobs=Demojob.new(@demojobsarray)
render json: @demojobs

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    相关资源
    最近更新 更多