Почтовый вызов Rails3 ActiveResource доставляет пустой хэш параметра

Я пытаюсь создать нового «Человека» в приложении Sinatra API из приложения Rails3, используя ActiveResource и Json. В Rails3 я создал модель "Person" и, используя ActiveResource, правильно вызываю 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

Из приложения Синатра:

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'})

Может кто-нибудь, пожалуйста, подскажите, что я пропустил или делаю неправильно, спасибо.


person Scott    schedule 22.06.2011    source источник


Ответы (1)


Объект Person должен знать атрибуты, как вы это делали на консоли. При выполнении Person.find он получает атрибуты через активный ресурс, но Person.new не знает их, поэтому в Person.new требуется любой способ сообщить Person, как показано ниже:

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

Это ответ?

person Fumisky Wells    schedule 20.09.2011