Ruby on rails 使用Rails创建嵌套JSON请求
我的情况有点复杂。我正在构建一个带有rails后端的iPhone应用程序。有两个模型对象,一个聊天会话和一个人。它们的定义如下: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
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