是否可以将javascript变量发送到控制器的create方法?

时间:2015-09-01 13:14:12

标签: javascript ruby-on-rails ajax controller

我使用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错误请求。

我希望变量fundsweight在控制器的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

2 个答案:

答案 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变量 weightfunds,当用户点击提交按钮时,我的参数自然会发送到create方法,我可以使用该方法检索它们代码@user = User.new(ticket_params)