在Rails API方面,我有以下两个模型:
class Grower < ActiveRecord::Base
has_many :addresses, as: :addressable
accepts_nested_attributes_for :addresses
end
class Address < ActiveRecord::Base
belongs_to :addressable, polymorphic: true
end
以及一个Growers控制器,它返回并可以使用嵌入的地址属性创建/更新种植者。我还有一个具有正确路由的地址控制器,以便可以为特定的种植者查看/创建/更新地址。后者更像是一个“in-case”,我不确定我是否需要返回/更新/创建地址作为单独的有效负载。
我开始尝试拼凑一个Ember应用程序,这个应用程序允许我在其地址的同时查看/编辑/创建一个Grower。任何人都可以指向现有的真实或示例应用程序吗?我会随着时间的推移发布我的代码,但我已经知道某些方面会遇到麻烦:
Rails返回/期望名为 addresses_attributes 的嵌套参数。我确信,恩伯不会使用那种惯例。解决这个问题的最佳方法是什么?
由于多态关联(Grower以外的对象可以寻址),在API /地址方面,为了获得正确的belongs_to对象,Rails将 addressable_id 与 addressable_type 即可。在此示例中,addressable_type将是“Grower”,而addressable_id将是grower_id值。怎么会在Ember那边翻译呢?
更新:
我至少有几种不同的工作方式。至少对于这种特殊情况,我的首选解决方案是在答案部分。
答案 0 :(得分:8)
以下是基于@yuяi的策略的代码示例,该策略对我有用:
App.Post = DS.Model.extend
comments: DS.hasMany('comment')
App.PostSerializer = DS.ActiveModelSerializer.extend( DS.EmbeddedRecordsMixin,
attrs:
comments: {embedded: 'always'}
keyForAttribute: (attr) ->
if attr == "comments"
"comments_attributes"
else
@_super(attr)
)
此解决方案适用于Ember 1.6.1 和Ember Data 1.0.0-beta.8.2a68c63a 。
答案 1 :(得分:6)
我找到了几种方法来完成它,但最终的方法不需要对Rails / API方面进行任何更改。
在客户端(Ember)方面: