1

我正在尝试使用 ActiveResource 和 Json 从 Rails3 应用程序在 Sinatra API 应用程序中创建一个新的“人”。在 Rails3 中,我创建了一个“Person”模型并使用 ActiveResource 我正确调用了 API,该 API 正确读取了 URL,但似乎没有参数与对象一起传递。

从 Rails3 人模型:

class Person < ActiveResource::Base 
  self.site = "http://127.0.0.1:9393/"
  self.collection_name = "person/add"
  self.format = :json 
end

从 Rails3 控制台:

u=Person.new({"last_name"=>"Bill", "first_name"=>"Smith"})
=> #<Person:0xb73176f0 @attributes={"last_name"=>"Bill", "first_name"=>"Smith"}, @prefix_options={}> 
puts u.attributes
=> last_nameBillfirst_nameSmith
u.save
=> True

从 Sinatra 应用程序:

puts @app.params.keys
=> Nil
puts @app.params['last_name']
=> Nil
puts @app.params[:last_name]
=> Nil

使用 IRB 控制台可以:

Net::HTTP.post_form(URI.parse('http://127.0.0.1:9393/user/add.json'),{'first_name' => 'Smith', 'last_name' => 'Bill'})

有人可以就我错过的或做错的事情给出一些指导,谢谢。

4

1 回答 1

0

Person 对象应该知道属性,就像您在控制台上所做的那样。在执行 Person.find 时,它通过 activeresource 获取 attrs,但 Person.new 不知道它们,因此在 Person.new 中需要以任何方式告诉 Person,如下所示:

class PeopleController < ApplicationController
   ...
   def new
    @person = Person.new(:name=>nil, :age=>nil, ...)
   end
   ...

这回答吗?

于 2011-09-20T09:13:43.807 回答