Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails4:将非论坛数据从前端传递到后端,并对其进行处理_Ruby On Rails_Ruby_Ajax_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails Rails4:将非论坛数据从前端传递到后端,并对其进行处理

Ruby on rails Rails4:将非论坛数据从前端传递到后端,并对其进行处理,ruby-on-rails,ruby,ajax,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ajax,Ruby On Rails 4,Activerecord,嗯。所以我有一个小的XHR请求,其中返回json。一旦成功,json就会像这样传递 var myArr = JSON.parse(xmlhttp.responseText); myMainFunction(myArr); function myMainFunction(arr) { var vShipTypeID = arr[0].victim.shipTypeID; } 我需要将vShipTypeID发送到rails。我的目标是将此值发送回activerecord,返回的信

嗯。所以我有一个小的XHR请求,其中返回json。一旦成功,json就会像这样传递

var myArr = JSON.parse(xmlhttp.responseText);
myMainFunction(myArr);

function myMainFunction(arr) {
    var vShipTypeID = arr[0].victim.shipTypeID;
    }
我需要将vShipTypeID发送到rails。我的目标是将此值发送回activerecord,返回的信息将在js或json文件中发送到控制器中的respond_to语句

@shipName = InvType.find(vShipTypeID).name
这里是主要的想法。客户机将船的ID发送给rails,rails返回船的名称

我知道如何发出Ajax请求

我不知道如何在服务器端处理请求。也就是说,rails接收到数据后,我在哪里可以找到它,以及如何将其转换为可用的数据,以便我可以使用从客户端接收到的值生成activerecord语句


有人吗?

您需要在控制器中处理json请求。有关详细信息,请查看此项

对于控制器中的一个快速示例,请创建一个新操作getnamefromid,并从客户端调用该控制器

respond_to do |format|
  format.json  { render :json => @shipName }
end

一个简单的解决方案可以是在船舶控制器上定义一个操作,并定义到它的路线,例如在routes.rb中定义一条路线

get "/ship/:id/getname" => "ship#getname"
在您的
js
文件中

$.get( "/ship/"+vShipID+"/getname")
  .done(function(data) {
    alert( "Ship name: " + data.name );
  })
  .fail(function() {
    alert( "error" );
  });
在您的ship_controller.rb中

class ship_controller <ApplicationController
     ....... #other methods
     def getname
         @shipname = Ship.find(params[:id]).name
         if request.xhr
            render :json => {name: @shipname} and return
         else
            redirect_to ship_path(params[:id])
         end
     end
     ........ #some other methods
end
class ship_controller{name:@shipname}并返回
其他的
将_重定向到ship_路径(参数[:id])
结束
结束
........ #其他一些方法
结束

这并没有解释我如何确保“vShipTypeID”成功地从客户端进入activerecord语句。您需要向ships controller添加一个自定义操作getnamefromid,并使用该id从客户端调用该自定义操作,然后读取json响应。