Ruby on rails 向Rails控制器发送jQuery变量

Ruby on rails 向Rails控制器发送jQuery变量,ruby-on-rails,ruby,ajax,jquery,Ruby On Rails,Ruby,Ajax,Jquery,我试图将变量“response.data.uri”从我的jQuery获取到rails控制器,但它不起作用。我可以访问rails控制器,但变量不在那里 jQuery: function responseCallbackHandler(response) { switch (response.status) { case 201: $.ajax({ url: '#{addbank_bankaccts_path}', type: 'POST',

我试图将变量“response.data.uri”从我的jQuery获取到rails控制器,但它不起作用。我可以访问rails控制器,但变量不在那里

jQuery:

function responseCallbackHandler(response) {
   switch (response.status) {
     case 201:
         $.ajax({ url: '#{addbank_bankaccts_path}',
         type: 'POST',
         beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', '#{form_authenticity_token}')},
         dataType: "json",
         data: 'account_uri=' + response.data.uri
         success: function(response) {
           // successfully executed the controller method
           }
         });
         break;
     }
 }
post "/bankaccts/new" => 'bankaccts#addbank' 
class BankacctsController < ApplicationController

  def addbank
      @uri = (params['customer_uri'])
      @id = (params['id'])
      @auri = (params['account_uri'])
      # all equal nil ^
      redirect_to root_url
  end
routes.rb:

function responseCallbackHandler(response) {
   switch (response.status) {
     case 201:
         $.ajax({ url: '#{addbank_bankaccts_path}',
         type: 'POST',
         beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', '#{form_authenticity_token}')},
         dataType: "json",
         data: 'account_uri=' + response.data.uri
         success: function(response) {
           // successfully executed the controller method
           }
         });
         break;
     }
 }
post "/bankaccts/new" => 'bankaccts#addbank' 
class BankacctsController < ApplicationController

  def addbank
      @uri = (params['customer_uri'])
      @id = (params['id'])
      @auri = (params['account_uri'])
      # all equal nil ^
      redirect_to root_url
  end
控制器:

function responseCallbackHandler(response) {
   switch (response.status) {
     case 201:
         $.ajax({ url: '#{addbank_bankaccts_path}',
         type: 'POST',
         beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', '#{form_authenticity_token}')},
         dataType: "json",
         data: 'account_uri=' + response.data.uri
         success: function(response) {
           // successfully executed the controller method
           }
         });
         break;
     }
 }
post "/bankaccts/new" => 'bankaccts#addbank' 
class BankacctsController < ApplicationController

  def addbank
      @uri = (params['customer_uri'])
      @id = (params['id'])
      @auri = (params['account_uri'])
      # all equal nil ^
      redirect_to root_url
  end
class BankacctsController
啊,我知道:在ruby中,单引号不执行变量插值。因此,如果您发布浏览器中显示的jquery,ajax请求的url将是:

'#{addbank_bankaccts_path}'
…这是胡言乱语——浏览器不理解ruby或rails。浏览器中的Url必须类似于:

http://mysite.com/js/myjs.js
js/myjs.js
如果jquery位于一个文件中,其名称以.erb结尾,那么在将该文件发送到浏览器之前,rails将执行该文件中的任何ruby代码,但ruby中的单引号不执行变量插值。以下是一个例子:

name = 'Dave'
str = '#{name} says hello.'
puts str

--output:--
#{name} says hello
但用双引号:

name = 'Dave'
str = "#{name} says hello."
puts str

--output:--
Dave says hello.
我不知道你是否有python背景,所有的引号都是等价的;但是在很多语言中,包括ruby,单引号和双引号是不等价的

您的表单\u真实性\u令牌存在相同的问题:

beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', '#{form_authenticity_token}')},
试试-


数据:{account\u uri:response.data.uri,'customer\u uri':SOME\u VALUE,'id':SOME\u VALUE}

我没有看到您使用
params['account\u uri']
,您尝试过吗?没有参数['account\u uri']是否检查控制器中的
params
散列,以确保数据通过,并检查
response.data.uri
是否在浏览器控制台中具有您期望的值。response.data.uri确实具有我在js中想要的值。当我到达控制器时,让我检查params中的paramsyeah nothing