Ruby on rails 找到的对象应为哈希、Ruby on Rails、Rest

Ruby on rails 找到的对象应为哈希、Ruby on Rails、Rest,ruby-on-rails,json,rest,Ruby On Rails,Json,Rest,我已经为我的网站编写了一个RESTAPI。目前我有它,这样一个用户可以拥有许多计算机。我试图发送一个json负载,用计算机更新用户帐户。为了进行测试,我发送了以下内容: {"auth_token"=>"AiprpscAqN6hnvNDHSwh", "user"=>"{"id":1, "username":"Rizowski", "email":"test@gmail.com", "computer":[{"id":0, "user_id":1, "name"

我已经为我的网站编写了一个RESTAPI。目前我有它,这样一个用户可以拥有许多计算机。我试图发送一个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,您只能通过API控制器发送端点理解的数据(例如JSON、XML、表单数据等)。顺便说一句,此处显示的数据无效,用户周围的双引号将使其成为无效哈希。你是在这里拼接多个东西吗?@Danielvans是的,我正试图发送一个对象(用户)以及与该用户相关联的计算机列表。@DaveNewton对此表示抱歉,我的意思是以我的方式发送JSON。啊,好的,我一直在阅读关于该属性的内容,我不确定应该将其放置在哪里。我一直认为我应该把它放在我的用户模型类中。但这为我澄清了一切。非常感谢。