我的应用程序有以下模型类:
class Parent < ActiveRecord::Base
# Setup accessible (or protected) attributes for your model
attr_accessible :child_attributes, :child
has_one :child
accepts_nested_attributes_for :child
#This is to generate a full JSON graph when serializing
def as_json(options = {})
super(options.merge, :include => {:child => {:include => :grandchild } })
end
end
class Child < ActiveRecord::Base
# Setup accessible (or protected) attributes for your model
attr_accessible :grandchild_attributes, :grandchild
belongs_to :parent
has_one :grandchild
accepts_nested_attributes_for :grandchild
end
class Grandchild < ActiveRecord::Base
belongs_to :child
end
在我的控制器中,我有一个create
方法,定义如下:
def create
@parent = Parent.new(params[:parent])
#Rest ommited for brevity - just respond_with and save code
end
end
我的请求在日志中显示为:
Parameters: {"parent"=>{"child"=>{"grandchild"=>{"gc_attr1"=>"value1", "gc_attr2"=>"value2"}}, "p_attr1"=>"value1"}
哪个是来自我的使用RestKit的iphone app客户端的完整序列化图。 我在here之类的其他问题上看过,那就是this博客文章。 我的问题是,我不知道如何使用RestKit从我的客户端控制序列化图形,以便构建这样的请求(这样,它可以工作..用调试器测试)
Parameters: {"parent"=>{"child_attributes"=>{"grandchild_attributes"=>{"gc_attr1"=>"value1", "gc_attr2"=>"value2"}}, "p_attr1"=>"value1"}
任何人都有想法,如果有任何选项,我可以传递给Parent.new方法或自定义RestKit JSON输出,我可以在嵌套的JSON对象中实现model_attributes结构?
由于
答案 0 :(得分:0)
我已经使用RABL解决了这个问题,这是一个将json渲染为视图的gem。很棒的工作。 这允许我自定义模型的序列化图。
在RestKit端(使用OM2.0 - 新对象映射),我已将所有关系的映射全部更改为child_attributes
,例如:
RKObjectMapping* parentMapping = ... //Initialize your mapping here
RKObjectMapping* childMapping = ... //Initialize your mapping here
//Configure mapping relationship with child
[parentMapping mapKeyPath:@"child_attributes" toRelationship:@"childProperty" withObjectMapping:childMapping];
//Register mappings
RKObjectManager* manager = [RKObjectManager sharedManager];
[manager.mappingProvider registerMapping:parentMapping withRootKeyPath:@"parent"];
[manager.mappingProvider registerMapping:childMapping withRootKeyPath:@"child"];