【问题标题】:Saving attribute from array of objects in Rails从 Rails 中的对象数组中保存属性
【发布时间】:2014-01-29 09:23:32
【问题描述】:

我通过 AJAX 发布/删除将 JSON 对象数组作为 Rails 中的参数传递,例如

[{'id': 3, 'status': true}, {'id': 1, 'status': true}]

如何循环通过params[:list] 来获取每个id 和状态值?

【问题讨论】:

  • 在参数中...变成 ["0", {"id"=>"9", "status"=>"true"}]
  • 错误:无法将符号转换为整数

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


【解决方案1】:

这样做:

params[:list].each do |hash|
  hash['id'] # => 3
  hash['status'] # => true
end

【讨论】:

  • 这不是循环遍历每个项目吗?即您不需要循环遍历hash 变量?
  • 谢谢,这是正确的,我发布的答案有这个,并且还处理了为什么这不能事先工作的问题。
【解决方案2】:

尝试如下:

params[ :list ][ 0 ][ :id ] # => 3, ...
params[ :list ].each {| v | v[ :id ] } # => 3, 1

如果您的哈希值类似于 ["0", {"id"=>"9", "status"=>"true"}]:

# a = ["0", {"id"=>"9", "status"=>"true"}]
h = Hash[[a]]
# => {"0"=>{"id"=>"9", "status"=>"true"}}

访问它将是:

h['0'][ :id ] # => '9'

【讨论】:

  • @bcm 转储params[ :list ][ 0 ].inspect
  • 谢谢,我已经发布了解决根本问题的答案。
【解决方案3】:

这有两个步骤,加上@Agis 的建议。 (感谢@Agis)

我必须先将 JSON 字符串化:

'p': JSON.stringify(p),

这样它就不会创建那个奇怪的数组。还有另一个使用此方法生成正确数据 JSON 对象的 stackoverflow 答案,但它封装了整个数据......我需要在 p 上使用它并且不影响“字符串化”安全令牌。 从这里明白了这一点:Rails not decoding JSON from jQuery correctly (array becoming a hash with integer keys)

接下来,我必须使用

解码那个参数
ActiveSupport::JSON.decode(params[:p])

来自这里的线索:How do I parse JSON with Ruby on Rails?

最后,我可以使用循环访问item['id']

【讨论】:

    【解决方案4】:

    这是一个循环:

    params[:list].each do |item|
        item.id
        item.satus
    end
    

    如果你想创建一个id 的数组或其他东西:

    list_ids = params[:list].map(&:id)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多