一般来说,我对 Web 开发还很陌生,我一直在开发一个我希望(最终)与 Android 应用程序交互的 Ruby on Rails 应用程序。我目前正在寻找最合适和最安全的方法来从 Android 应用程序发送的 http POST 创建对象。
我接近它的方式是通过使用 chrome 的 REST 客户端扩展尝试将 POST 发送到我在 localhost 上的应用程序并让它从 POST 信息创建一个对象来初步实现这一点。
这是来自 chrome 扩展的 POST 的结果:
Started POST "/problems" for 127.0.0.1 at 2012-09-15 14:16:19 -0400
Processing by ProblemsController#create as */*
Parameters: {"user"=>"7876483097", "latitude"=>"18.378383", "longitude"=>"-67.026201", "ptype"=>"2", "description"=>"Poste roto"}
←\[1m←\[36m (0.0ms)←\[0m ←\[1mbegin transaction←\[0m
←\[1m←\[35m (0.0ms)←\[0m rollback transaction
Rendered problems/new.html.erb within layouts/application (31.0ms)
Rendered layouts/_shim.html.erb (0.0ms)
←\[1m←\[36mUser Load (0.0ms)←\[0m ←\[1mSELECT "users".* FROM "users" WHERE "users"."remember_token" = 'gdmKIurcqDOMoDGWE4IBng' LIMIT 1←\[0m
Rendered layouts/_header.html.erb (4.0ms)
Rendered layouts/_footer.html.erb (1.0ms)
Completed 200 OK in 93ms (Views: 87.0ms | ActiveRecord: 0.0ms)
出现“回滚事务”的地方意味着创建方法中的@problem.save 失败。任何人都可以帮助确定我缺少什么或者我应该如何改变我的方法来正确地做到这一点。
这是我的模型架构:
create_table "problems", :force => true do |t|
t.string "user"
t.float "latitude"
t.float "longitude"
t.integer "ptype"
t.string "description"
t.integer "priority"
t.integer "status"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "avatar_file_name"
t.string "avatar_content_type"
t.integer "avatar_file_size"
t.datetime "avatar_updated_at"
t.boolean "gmaps"
t.string "address"
end
这是我的创建方法:
def create
@problem = Problem.new(params[:problem])
if @problem.save
flash[:success] = "Problema guardado"
redirect_to @problem
else
@problem.errors.full_messages
flash.now[:error] = 'Informacion incorrecta'
render 'new'
end
end
这是 POST 正文:
user=7876483097&latitude=18.378383&longitude=-67.026201&ptype=2&description=Poste+roto
而且,这是问题模型和验证
class Problem < ActiveRecord::Base
acts_as_gmappable :latitude => 'latitude', :longitude => 'longitude', :process_geocoding => :geocode?,
:address => "address", :normalized_address => "address",
:msg => "Lo sentimos, ni Google puede localizar esa direccion"
attr_accessible :user, :latitude, :longitude, :ptype, :description, :avatar, :address
validates(:user, presence: true)
validates(:latitude, presence: true)
validates(:longitude, presence: true)
validates(:ptype, presence: true)
提前致谢。