我在Rails应用程序中使用React.js创建一个简单的注释表单。当我提交评论时,我无法使用评论呈现作者的姓名。
TypeError: comment.user is undefined
React.createElement(Comment, {username: comment.user.name, body: comment.body key: comment.id}
commentlist.jsx.erb
var CommentList = React.createClass({
render: function () {
var commentNodes = this.props.comments.map(function ( comment ) {
return <Comment username={ comment.user.name } body={ comment.body } key={ comment.id } />
});
return (
<div className="comment-list">
{ commentNodes }
</div>
)
}
});
commentscontroller.erb
def index
@presenter = {
:comments => Comment.last(5),
:form => {
:action => comments_path,
:csrf_param => request_forgery_protection_token,
:csrf_token => form_authenticity_token
}
}
end
def create
@comment = Comment.new(comment_params)
@comment.commentable = @event
@comment.body = comment_params[:body]
@comment.user_id = current_user.id
@comment.save
if request.xhr?
render :json => Comment.last(5)
else
redirect_to comments_path
end
end
评论/ index.html.erb
<%= react_component('CommentBox',
{:presenter => @presenter.to_json(:include => :user)},
{:prerender => true}) %>
任何人都知道如何解决这个问题?如果我遗漏了任何代码示例,请告诉我。
更新
这不能回答我的问题,但它是一个解决方案。我在评论模型中添加了author
方法,该方法返回了评论者的姓名,因此我现在可以直接从评论中访问该名称。
def author
User.find(self.user_id).name
end
虽然我仍然想知道如何通过协会进行访问。
答案 0 :(得分:0)
def as_json
{:author => self.user.name}
end
无论你在哪里渲染json对象,只需调用Comment.last.as_json
参考http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/