私は一般的にWeb開発にかなり慣れておらず、(最終的には)Androidアプリと対話したいRubyonRailsアプリに取り組んでいます。私は現在、Androidアプリから送信されるhttpPOSTからオブジェクトを作成するための最も適切で安全な方法を探しています。
Chrome用のRESTクライアント拡張機能を使用してローカルホスト上のアプリにPOSTを送信し、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)
「ロールバックトランザクション」が表示される場所は、createメソッドの@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
これが私のcreateメソッドです:
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)
前もって感謝します。