【问题标题】:Rails: JSON attribute is handled as a method. No method errorRails:JSON 属性作为方法处理。没有方法错误
【发布时间】:2014-04-27 22:08:27
【问题描述】:

我在访问 JSON 数据的属性时遇到问题。它认为它是一个函数,而不是访问 JSON 数据。

 @response = HTTParty.get('http://localhost:4000/test')
 @json = JSON.parse(@response.body)
  @json.each do |pet|
  MyModel.create(pet)       ! WORKS
  puts "my object #{pet}"   ! WORKS
  puts "my object attribute #{pet.myattribute}" ! DOES NOT WORK
  end

没有MethodError myattribute

感谢您的帮助!

【问题讨论】:

  • pet 长什么样子?
  • {"pet_id": "49926", title: "my Title"} 。当访问pet_id 时,它会显示NoMethodErrorNoMethodError: undefined method pet_id' for #<Hash:0x00000105347cf8>

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


【解决方案1】:

你可能已经习惯了 JavaScript,object.some_keyobject["some_key"] 做同样的事情。在 Ruby 中,哈希只是一个哈希,因此您必须通过 object["some_key"] 访问值。 Ruby 中的 Struct 类似于 JavaScript 对象,您可以通过两种方式访问​​值,但必须预先定义键。

【讨论】:

    【解决方案2】:

    @json = JSON.parse(@response.body) 返回一个哈希,所以你需要这样做

    puts "my object attributes #{pet['id']}, #{pet['title']}"
    

    您可能希望转换为HashWithIndifferentAccess,以便可以使用符号而不是带引号的字符串,即

    @json = JSON.parse(@response.body).with_indifferent_access
    # ...
    puts "my object attributes #{pet[:id]}, #{pet[:title]}"
    

    【讨论】:

    • 谢谢!现在使用pet['title']
    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多