Ruby on rails 从react组件传递参数值

Ruby on rails 从react组件传递参数值,ruby-on-rails,ruby,reactjs,react-rails,Ruby On Rails,Ruby,Reactjs,React Rails,在我的应用程序中,人们可以评论宠物的图片。我使用的是来自的react示例,尽管我更改了很多内容 现在,它成功地显示了现有的注释。现在,当用户创建注释时,我必须传递注释正文、用户id和宠物id。我尝试执行以下操作: var CommentForm = React.createClass({ handleSubmit:function() { var user=this.refs.user_id.getDOMNode().value.trim(); var comme

在我的应用程序中,人们可以评论宠物的图片。我使用的是来自的react示例,尽管我更改了很多内容

现在,它成功地显示了现有的注释。现在,当用户创建注释时,我必须传递注释正文、用户id和宠物id。我尝试执行以下操作:

var CommentForm = React.createClass({
handleSubmit:function()
    {
      var user=this.refs.user_id.getDOMNode().value.trim();
      var comment=this.refs.body.getDOMNode().value.trim();
      var pet_id=this.refs.pet_id.getDOMNode().value.trim();

      this.props.onCommentSubmit({comment:comment, user:user, pet:pet_id});
      if(!user||!comment||!pet_id)
        return false;
      var formData = $( this.refs.form.getDOMNode() ).serialize();
      this.props.onCommentSubmit( formData, this.props.form.action );

      // reset form
      this.refs.body.getDOMNode().value = "";
    },

render: function () {
return (
  <form ref="form" className="comment-form" action={ this.props.form.action } accept-charset="UTF-8" method="post" onSubmit={ this.handleSubmit }>
    <p><input type="hidden" name={ this.props.form.csrf_param } value={ this.props.form.csrf_token } /></p>
    <p><input type="hidden" ref="user" value={ this.props.user_id } /></p>
    <p><input type="hidden" ref="pet_id" value={ this.props.pet_id } /></p>
    <p><textarea ref="body" name="comment[text]" placeholder="Say something..." /></p>
    <p><button type="submit">Post comment</button></p>
  </form>
)
}
});
我的CommentsController看起来像

def create
    @pet = Pet.find(params[:pet_id])
    @comment = @pet.comments.new(comment_params)
    @comment.user = current_user
 <%= react_component('CommentBox', 
{:presenter => @presenter.to_json}, 
{:prerender => true}) %>
def show
    @comments = @pet.comments
    @user = current_user
    @presenter = {
        :comments => @comments,
        :user => current_user,
        :pet_id => @pet,
        :form => {
            :action => comments_path,
            :csrf_param => request_forgery_protection_token,
            :csrf_token => form_authenticity_token
      }
为了进一步澄清,我有三个模型,Pets、Users和Comments,当用户发表评论时,comment会获取userid和pet\u id作为其参数

编辑:

我的组件看起来像

def create
    @pet = Pet.find(params[:pet_id])
    @comment = @pet.comments.new(comment_params)
    @comment.user = current_user
 <%= react_component('CommentBox', 
{:presenter => @presenter.to_json}, 
{:prerender => true}) %>
def show
    @comments = @pet.comments
    @user = current_user
    @presenter = {
        :comments => @comments,
        :user => current_user,
        :pet_id => @pet,
        :form => {
            :action => comments_path,
            :csrf_param => request_forgery_protection_token,
            :csrf_token => form_authenticity_token
      }

因此,我可以看到一些问题。首先,使用ref,在这里您应该是name

<input type="hidden" ref="pet_id" value={ this.props.pet_id } />

从你在这里发布的内容很难说。反应组件中的pet_id设置是否正确?当您执行post时,pet_id是否在请求中传递回服务器?您是否已使用正确的路由设置了rails,以便它知道参数[pet_id]是什么?hi@Stewart请查看我的编辑,了解当前如何设置react组件。关于您的另外两个问题,我想知道“

”是否将请求传递回服务器。另外,最后一个问题可能是我目前缺少什么。你能详细说明一下我怎么做吗?你能在做post请求时将传入参数的转储发布到服务器上吗。我怀疑ref=“pet\u id”应该是隐藏字段中的name=“pet\u id”嘿@Stewart谢谢!我按照你的建议做了,并意识到它实际上并没有传递任何值!因此,为了看看如果数据正确传递,它是否会工作,我只是对值进行了硬编码,它终于工作了。。除了现在,页面仍会刷新。我想知道这是否是因为我在PetController中设置了:action=>comments\u路径。有什么想法吗?我改变了很多事情的方向,但到目前为止似乎都没有成功。嗨@Stewart,谢谢你继续帮助我。关于你的第二段,我认为你指的是action={this.props.form.action}和onSubmit={this.handleSubmit},删除后者似乎不会影响情况,所以我想我可以删除它。但它仍在刷新页面。有什么我能修的吗?我想知道:action=>comments\u路径是否与此有关。我对rails和react都还很陌生,所以我非常感谢你的帮助。你能试着删除action并看看发生了什么吗?我得到了“No route matches[POST]”/pets/2“。