我使用Rails 4。
我有一个User模型和一个Record模型,我想向控制器的create方法发送两个javascript变量。
为此,我实现了一个AJAX调用:
var funds = $('input#test').val();
var weight = $('input#result').val();
$.ajax({
url: "/final",
type: "POST",
data: {
funds: funds,
weight: weight,
},
complete: function(){
console.log('Congrats');
}
});
我在配置路由文件中实现了写这个的路由:
post '/register' => 'users#create'
这是我的控制者:
def create
@user = User.new(ticket_params)
@funds = params([:funds])
@weight = params([:weight])
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
Record.create(fund: @funds, weight: @weight)
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
format.js
end
end

但我收到错误400错误请求。
我希望变量funds
和weight
在控制器的create方法中可用,以便我可以使用它们。
我读到错误400错误请求表明我没有使用正确的动词来进行我的AJAX调用。事实上,使用GET而不是POST使错误消失。但是当我创建用户时,控制器说我的参数是空的.....但是没有!我查了一下。
如何将一些javascript变量发送到create方法?
以下是我浏览器网络控制台的错误消息:
ActionController::ParameterMissing in UsersController#create
param is missing or the value is empty: user
Application Trace
app/controllers/users_controller.rb:109:in `user_params'
app/controllers/users_controller.rb:40:in `create'
我的控制台中的错误是:
POST http://localhost:3000/final 400 (Bad Request)
m.ajaxTransport.send @ jquery.self-ad66c584c2469d2bb527ba7aef5893549f1554ccc8ab3ccb43bd09ce8c3bf7a1.js?body=1:6
m.extend.ajax @ jquery.self-ad66c584c2469d2bb527ba7aef5893549f1554ccc8ab3ccb43bd09ce8c3bf7a1.js?body=1:6
(anonymous function) @ VM2175:27
m.event.dispatch @ jquery.self-ad66c584c2469d2bb527ba7aef5893549f1554ccc8ab3ccb43bd09ce8c3bf7a1.js?body=1:5
m.event.add.r.handle @ jquery.self-ad66c584c2469d2bb527ba7aef5893549f1554ccc8ab3ccb43bd09ce8c3bf7a1.js?body=1:5
答案 0 :(得分:0)
首先确认你有:
gem 'jquery-rails'
中的Gemfile
您的//= require jquery
application.js
你的data
有一个,
应该被删除:
$.ajax({
url: "/register",
type: "POST",
dataType: "json",
data: {
authenticity_token: $('meta[name=csrf-token]').attr('content'),
funds: funds,
weight: weight
},
complete: function(){
console.log('Congrats');
}
});
您可以根据需要在ajax data
参数中放置尽可能多的参数。
如果您需要更多帮助,请告诉我们
答案 1 :(得分:0)
我终于找到了解决问题的方法。
其实我正在处理我的用户模型的_form.html.erb
文件。我的意思是我正在处理的网页是用户填写表单的网页。我想用AJAX调用做的是将一些参数发送到我的控制器的create方法,以便我可以在create方法中使用这些参数。
然而,当进行AJAX调用时,它会触发该方法的运行,其中包含所有代码。在我的控制器中,您可以看到第一行代码检索ticket_params
,它们应该是用户在表单中填写的信息。但是有空的,因此用户还没有点击提交按钮(他刚刚在触发AJAX调用的表单输入中写了一些东西)。
所以我所做的不是做一个AJAX调用来将我的参数发送到创建动作,而是为用户模型声明另外两个属性,两个再使用两个 hidden_field 保存每个 javascript变量 weight
和funds
,当用户点击提交按钮时,我的参数自然会发送到create方法,我可以使用该方法检索它们代码@user = User.new(ticket_params)
。