Rails API 传递 ActiveRecord 对象

Rails API pass ActiveRecord object

我正在尝试将整个记录从一个站点传递到另一个站点。宁愿不对它进行编程以使其成为所有字符串。

我想像访问接收网站中的对象一样访问它们。

我已经连接好一切并正常通信。

这就是我试图将这辆卡车送到

的方式

这是在 :after_save

def send_to_transport
    TransportTruckApi.create(self, self.user, self.company)
  end

这是发送数据的方法

  def self.create(truck_params, user_params, company_params, site = URL, api='/api/v1/trucks')
    conn = api_conn(site)
    conn.params = {'truck' => truck_params, 'user' => user_params, 'company' => company_params}
    response = conn.post api
    json_parse(response)
  end

激活时我在接收服务器上得到这个:

Started POST "/api/v1/trucks?company=%23%3CCompany%3A0xc965ddc%3E&truck=%23%3CTruck%3A0xc5d30fc%3E&user=%23%3CUser%3A0xcb3baa8%3E" for 127.0.0.1 at 2015-07-24 09:21:47 -0500
Processing by TrucksController#create as */*
Parameters: {"company"=>"#<Company:0xc965ddc>", "truck"=>"#<Truck:0xc5d30fc>", "user"=>"#<User:0xcb3baa8>"}
WARNING: Can't verify CSRF token authenticity
   (74.5ms)  SELECT * FROM geometry_columns WHERE f_table_name='trucks'
Completed 500 Internal Server Error in 640ms

NoMethodError (undefined method `stringify_keys' for "#<Truck:0xc5d30fc>":String):
    activerecord (3.2.3) lib/active_record/attribute_assignment.rb:69:in `assign_attributes'
  activerecord (3.2.3) lib/active_record/base.rb:498:in `initialize'
  cancan (1.6.10) lib/cancan/controller_resource.rb:85:in `new'

如果我必须单独发送每个属性,有没有办法简化代码。所以我不必定义每个属性。

可能是某种类型的序列化或 json 方法我是 rails 的新手,尤其是 rails

中的 API

您应该将属性传递给 self.create() 方法,而不是 object,修复:

def send_to_transport
  TransportTruckApi.create(self, self.user, self.company)
end

至:

def send_to_transport
  TransportTruckApi.create(self.attributes, self.user, self.company)
end

这个方法接受属性(我想)它应该是一个散列,但是你传递了 Track 实例 "#<Truck:0xc5d30fc>":

的字符串表示
def self.create(truck_params, user_params, company_params, site = URL, api='/api/v1/trucks')
  ......
  conn.params = {'truck' => truck_params, 'user' => user_params, 'company' => company_params}
  .....                    ^^^^^^^^^^^^^^ 
end