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
我正在尝试将整个记录从一个站点传递到另一个站点。宁愿不对它进行编程以使其成为所有字符串。
我想像访问接收网站中的对象一样访问它们。
我已经连接好一切并正常通信。
这就是我试图将这辆卡车送到
的方式这是在 :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