【问题标题】:Object expected Hash found, Ruby on Rails, Rest对象预期哈希找到,Ruby on Rails,Rest
【发布时间】:2013-02-13 22:38:29
【问题描述】:

我已经为我的网站编写了一个 Rest api。目前我拥有它,以便用户拥有许多他们可以拥有的计算机。我正在尝试发送一个 json 有效负载,以使用计算机更新用户帐户。为了测试这是我发送的:

 {"auth_token"=>"AiprpscAqN6hnvNDHSwh",
 "user"=>"{"id":1,
 "username":"Rizowski",
 "email":"test@gmail.com",
 "computer":[{"id":0,
    "user_id":1,
    "name":"Desktop",
    "enviroment":"Windows 8",
    "ip_address":"192.168.1.10",
    "account":[]}]}",
 "format"=>"json",
 "id"=>"1"}

一旦我发送它,Rails 控制器就会接收它并使用 JSON.parse 方法将请求解析为哈希。一旦我尝试保存用户对象,它会说:

ActiveRecord::AssociationTypeMismatch in Api::V1::UsersController#update 
Computer(#51701664) expected, got Hash(#17322756)

附带问题:我仍在尝试完全理解 rails 和 rest,但是像我一样发送计算机对象是一个好习惯吗?或者我应该通过我的计算机 api 控制器发送计算机数据吗?

【问题讨论】:

  • 您不想保存哈希,您需要从中创建一个对象。最后一个问题有点荒谬;您正在调用 REST API,您只能发送端点可以理解的数据(例如 JSON、XML、表单数据等)。您正在通过 API 控制器发送。
  • 顺便说一句,您在此处显示的数据无效,用户周围的双引号将使其成为无效哈希。你在这里把多个东西拼接在一起吗?
  • @DanielEvans 是的,我正在尝试发送 1 个对象(用户)以及与该用户关联的计算机列表。
  • @DaveNewton 抱歉,我的意思是按我的方式发送 JSON。

标签: ruby-on-rails json rest


【解决方案1】:

解决您的错误的方法是使用密钥computer_attributes 而不是computer

这是强关联和分层数据的正常做法。如果computers 将独立于用户进行更新,您当然应该使用它自己的控制器。

【讨论】:

  • 啊,好吧,我一直在阅读有关该属性的信息,但不确定应该将其放在哪里。我一直在想我应该把它放在我的用户模型类中。但这为我清除了它。谢谢。
猜你喜欢
  • 2012-01-28
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多