【发布时间】:2014-11-29 19:01:12
【问题描述】:
我似乎无法从模型中获取“计算”属性。在这种情况下,我无法获得属性 commented_by
我的应用程序结构非常简单:我有一个包含许多 cmets 的 Post 模型。在我显示帖子的 post.hbs 中,我有一个部分呈现与该帖子关联的所有 cmets,如下所示:
{{#each comment in comments}}
{{render "comment" comment}}
{{/each}}
我的评论模型(在 Rails 中)如下:
class Comment < ActiveRecord::Base
extend ActsAsTree::TreeView
belongs_to :post
belongs_to :user
def commented_by
self.user.username
end
end
它的后续序列化器如下:
class CommentSerializer < ActiveModel::Serializer
embed :ids, include: true
attributes :id,
:parent_id,
:body,
:created_at,
:updated_at,
:post_id,
:user_id,
:commented_by
belongs_to :post
belongs_to :comment
has_many :children, include: true, root: :comments
end
因此,我打算序列化 commented_by '计算属性'并将其发送。现在,在客户端:
我的ember评论模型如下:
App.Comment = DS.Model.extend({
parentID: DS.attr('number'),
body: DS.attr('string'),
createdAt: DS.attr('date'),
updatedAt: DS.attr('date'),
postID: DS.attr('number'),
userID: DS.attr('number'),
commentedBy: DS.attr('string'),
post: DS.belongsTo('post', {async: true}),
});
我猜路由、控制器和视图也可能是相关的:
App.CommentRoute = Ember.Route.extend({
model: function(params){
return this.store.find('comment', params.id);
},
})
App.CommentView = Ember.View.extend({
templateName: 'comments/comment',
});
App.CommentController = Ember.ObjectController.extend({
testProperty: "hello"
})
因此,我的问题是: 1.(主要问题:)为什么commented_by属性没有在客户端填充? (服务器端控制台显示得很好。)
跟进问题: 2. 我注意到我收到的最后一个服务器调用是 GET /posts/2。这是否意味着 Ember 的渲染不会调用来获取帖子的 cmets?不过,我仍然有 cmets 显示,只是没有显示 commented_by 属性(所有其他属性都在数据库中,在列中。),所以我只能猜测 Ember 没有通过 comment_controller.rb 中的显示操作;如果是这样,我如何正确序列化数据以包含 commented_by?
- 当我将调试器放入评论视图的 didinsert 元素并尝试获取评论控制器的“testProperty”时,我得到一个空值。这是否意味着渲染不显示任何 Ember-Controller 属性?
我知道这是...一个加载的问题,但我发现我不清楚这些问题,我希望这里有人可以帮助我。
【问题讨论】:
标签: ruby-on-rails ember.js active-model-serializers jsonserializer