2011-10-24 21 views
0

正如我最近开始的另一个类似的线程中提到的,我将一个ASP MVC应用程序移植到Sinatra,部分用于学习,部分用于生产目的。通过Sinatra模型和验证

目前我的ASP MVC应用程序没有视图,只是将模型公开为Xml/Json等,并以相同的方式接受它们。因此,在有人向服务器发送模型的情况下,它会自动绑定对象,执行验证,然后返回验证错误(如果有),如果不执行相关操作。

现在在Sinatra它是一个更多的准系统ASP MVC这是一个伟大的事情,因为我有更多的选择如何做这些部分,但我没有线索什么宝石/库功能可用于做到这一点。

我的理想场景是我将我的纯html/js前端发布为json模型,然后将其转换为实际模型(可通过Sinatra或其他框架进行验证),然后根据验证结果。

+0

上验证的任何信息?因为我发现所有与模型验证和ruby相关的资源都会返回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 

并在您的应用程序西纳特拉,抓住他们,并从这些属性打造的对象,你可以使用Sinatra和验证,以及:

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,但我的开发环境是windows和数据适配器似乎没有工作,因为这个问题的范围我不需要一个ORM我只是想能够得到一个模型并验证它,但在我的真实情况ORM将是其中的一个部分 – Grofit

+1

如果您只需要验证系统,[ActiveModel](http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like -activerecord /)可能会有所帮助。 – tbuehlmann