通过JSON与React.js和Rails

时间:2015-05-25 00:53:46

标签: ruby-on-rails json reactjs

我在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

虽然我仍然想知道如何通过协会进行访问。

1 个答案:

答案 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/