2011-10-24 5 views
0

私は最近始めた別の同様のスレッドで述べたように、一部は生産目的で学習するために、一部はSinatraにASP MVCアプリケーションを移植しています。Sinatraモデルと検証を渡す

現在、私のASP MVCアプリケーションはビューを持たず、モデルをXml/Jsonなどとして公開し、同様に受け入れます。したがって、サーバーにモデルを送信するシナリオでは、オブジェクトを自動的にバインドし、検証を実行し、関連するアクションを実行しない場合は、検証エラーを返します。

Sinatraでは、ASP MVCは、これらの部分をどのように行うかについてより多くの選択肢がありますが、宝石/ライブラリの機能がこれを行うために利用できるかどうかという手掛かりはありません。

私の理想的なシナリオは、純粋なhtml/jsフロントエンドでjsonというモデルを投稿してから、それを(Sinatraや他のフレームワークを介して)検証できる実際のモデルに変えたことです。検証結果。

+0

検証上の任意の情報?モデルの検証とルビーに関して、私が見つけたすべてのリソースがActiveRecordとRoRに戻ってきました。 – Grofit

+1

はい、[ActiveModel](http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/)をご覧ください。 – tbuehlmann

答えて

1

この宝石を見てみてみます

次に何を行うことができるはずがための属性を渡していますjsonオブジェクトに変換された属性のハッシュとして作成したいオブジェクト:

{:attribute1 => "value1", :attribute2 => "value2"}.to_json 

そして、あなたのシナトラアプリで、それらをキャッチし、それらの属性からオブジェクトを構築し、あなたにも検証するためにシナトラを使用することができます。

def '/create_object' do 
    content_type :json 
    obj = Object.new(JSON.parse(params[:object])) 

    if obj.save 
    obj.to_json 
    else 
    error 400, user.errors.to_json 
    end 
end 
+0

インスタンスコールto_jsonを使用できますか?つまり、私はPersonクラスのインスタンスを作成し、それをシリアル化してワイヤーに送ります。私のオブジェクトのいくつかはかなり複雑です。 – Grofit

+0

私は 'Person.first.to_json'のようなことができるはずだと信じています。より高度なシリアライゼーションを行いたい場合は、シリアライザをto_jsonメソッドに渡すことができます。シリアライズでできることの詳細については、これを見てください: http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html – Batkins

1

通常のORMの場合と似ています。たとえば、DataMapperを使用できます。あなたの手でそれを使用すると、単に特定のルートにHTTP経由でフォームを送信し、ような何かを行うことができます。

post '/create' do 
    @post = Post.new(params[:your_form]) 
    if @post.save 
    erb :a_template 
    else 
    erb :your_form 
    end 
end 

どこのparams [:your_form]フォームの内容を含むハッシュです。 JSONはまったく必要ありません。保存処理が失敗した場合(検証の理由など)、モデルオブジェクト@postにはエラーが発生し、別のビュー(たとえば:your_form)で処理することができます。

よろしく

トビアス

+0

私はDataMapperを見ていましたが、私の開発環境はウィンドウで、データアダプタは機能しませんでした。この質問の範囲では、ORMが必要ありません。モデルを取得して検証することができますが、状況ORMはその部分の1つになります – Grofit

+1

検証システムのみが必要な場合は、[ActiveModel](http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like -activerecord /)が役に立ちます。 – tbuehlmann

関連する問題