Ruby on rails 使用Rails创建嵌套JSON请求

Ruby on rails 使用Rails创建嵌套JSON请求,ruby-on-rails,json,associations,Ruby On Rails,Json,Associations,我的情况有点复杂。我正在构建一个带有rails后端的iPhone应用程序。有两个模型对象,一个聊天会话和一个人。它们的定义如下: class Person < ActiveRecord::Base belongs_to :chatsession end class Chatsession < ActiveRecord::Base has_many :people belongs_to :leader, :class_name => "Person" end 在create

我的情况有点复杂。我正在构建一个带有rails后端的iPhone应用程序。有两个模型对象,一个聊天会话和一个人。它们的定义如下:

class Person < ActiveRecord::Base
belongs_to :chatsession
end


class Chatsession < ActiveRecord::Base
has_many :people
belongs_to :leader, :class_name => "Person"
end
在create方法中的chatsession控制器上,我希望能够引入这个JSON,并让它创建一个新的chatsession对象和关联的person对象

执行此操作的相关代码为:

class ChatsessionController < ApplicationController
     def create
         @chatsession = Chatsession.new(params[:chatsession])   
     end
这很有效。但是,创建等效的json似乎不起作用。它期待着某种Person对象,我不知道如何表示它。我已经研究了以下解决问题的方法


这是最好的解决方案还是我遗漏了什么?

这篇文章对我来说似乎是一个很好的解决方案

你在哪一部分有问题


Rails 2.1及更高版本自动处理传入的JSON请求。只需确保您的iPhone应用程序将mime类型设置为json即可。请参阅其中还讨论了如何在帖子中测试传入的JSON。

这篇帖子对我来说是一个极好的解决方案

你在哪一部分有问题

Rails 2.1及更高版本自动处理传入的JSON请求。只需确保您的iPhone应用程序将mime类型设置为json即可。请参阅其中还讨论了如何在POST中测试传入的JSON。

两个指针:

  • 确保将“Content Type”和“Accept”标题都设置为“application/json”。通过查看/记录您的参数来测试这一点;如果它们都设置正确,你就可以开始了

  • 我认为您希望在聊天会话中为:leader设置一个
    接受嵌套属性

  • 您可能需要绕过真实性令牌;您的iPhone不会发送它,默认情况下rails会在post/put操作中查找它

但是您的设置和思维看起来很好。

两个指针:

  • 确保将“Content Type”和“Accept”标题都设置为“application/json”。通过查看/记录您的参数来测试这一点;如果它们都设置正确,你就可以开始了

  • 我认为您希望在聊天会话中为:leader设置一个
    接受嵌套属性

  • 您可能需要绕过真实性令牌;您的iPhone不会发送它,默认情况下rails会在post/put操作中查找它


但是您的设置和思维看起来不错。

谢谢您的链接。我最终采纳了这些建议,而且效果很好。我试图避免使用accepts_nested_属性,因为我想让我的东西与ObjectiveResource(一个iphone activeresource端口)一起工作。看起来objectiveresource无论如何都不会处理嵌套,所以我将只使用自己的JSON序列化。谢谢谢谢你的链接。我最终采纳了这些建议,而且效果很好。我试图避免使用accepts_nested_属性,因为我想让我的东西与ObjectiveResource(一个iphone activeresource端口)一起工作。看起来objectiveresource无论如何都不会处理嵌套,所以我将只使用自己的JSON序列化。谢谢感谢您提供关于真实性令牌和设置接受标头的提示。感谢您提供关于真实性令牌和设置接受标头的提示。
class ChatsessionController < ApplicationController
     def create
         @chatsession = Chatsession.new(params[:chatsession])   
     end
 test "should create session" do
       # people(:one) is retrieving from a fixture
       post :create, :chatsession => { :leader => people(:one) }
       assert_response :success
 end