【发布时间】:2016-02-20 14:06:06
【问题描述】:
我正在尝试使用 Rails 在 react js 中提交表单。
我是 React js 新手,这是我的第一个应用程序
我收到错误没有路由匹配 [POST] "/"
使用单个组件(jsx)提交表单。我收到路由错误。
以下是我的代码
编辑
我更改了路线,现在出现错误“InvalidAuthenticityToken in ItemsController#create”
如何在 jsx 文件中引发或警告变量?
我在 route.rb 中添加以下路线
resources :items
root :to => redirect("/items")
项目控制器
def index
@presenter = { :action => items_path,
:csrf_token => request_forgery_protection_token,
:csrf_param => form_authenticity_token
}
end
def create
@item = Item.new(item_params)
@item.save
end
private
def item_params
params.require(:item).permit(:name, :price)
end
Index.html.erb
<%= react_component('Form1', {:presenter => @presenter.to_json}, {:presenter => true})%>
Form1.js.jsx
var Form1 = React.createClass({
handeSubmit: function( e ){
e.preventDefault();
// var form = e.target;
// var name = form.querySelector('[name="item[name]"]').value;
// var price = form.queySelector('[name="item[price]"]').value;
var name = this.refs.name.getDOMNode().value.trim();
var price = this.refs.price.getDOMNode().value.trim();
if(!name || !price)
{
return false;
}
var formData = $( this.refs.form.getDOMNode() ).serialize();
var action = this.props.presenter.action
// alert({formData});
$.ajax({
data: formData,
url: action,
type: "POST",
dataType: "json",
});
},
render: function(){
return (
<form ref="form" className="" action={ this.props.presenter.action } acceptCharset="UTF-8" method="post" onSubmit={this.handleSubmit} >
<input type="hidden" name={ this.props.presenter.csrf_param } value={ this.props.presenter.csrf_token } />
<input ref="name" name="item[name]" /><br/>
<input ref="price" name="item[price]" /><br/>
<button type="submit"> Submit</button>
</form>
)
}
});
【问题讨论】:
-
很难从这里的有限代码中看出...您的项目控制器是否设置为资源?你验证
action = '/items'发送到ajax 调用了吗? -
一切看起来都不错。你能分享你的
routes.rb吗?也许到create的路径不见了? -
@gravityplanx 谢谢,请找到我的编辑
-
@rmosolgo 谢谢,请找到我的编辑
标签: ruby-on-rails forms reactjs