Ruby on rails SpineJS处理服务器端rails模型验证
我有一个模型,我们叫它Ruby on rails SpineJS处理服务器端rails模型验证,ruby-on-rails,ruby-on-rails-3,javascriptmvc,spine.js,Ruby On Rails,Ruby On Rails 3,Javascriptmvc,Spine.js,我有一个模型,我们叫它Book。在rails中,当书被保存时,我验证它的ISBN号的唯一性。对于我的前端,我有一个简单的SpineJS应用程序,让我添加一本新书 在SpineJS中: class App.Book extends Spine.Model @configure 'Book', 'name', 'isbn' @extend Spine.Model.Ajax validate: -> "Name required" unless @name "ISB
Book
。在rails中,当书被保存时,我验证它的ISBN号的唯一性。对于我的前端,我有一个简单的SpineJS应用程序,让我添加一本新书
在SpineJS中:
class App.Book extends Spine.Model
@configure 'Book', 'name', 'isbn'
@extend Spine.Model.Ajax
validate: ->
"Name required" unless @name
"ISBN required" unless @isbn
在轨道上:
class Book < ActiveRecord::Base
attr_accessible :name, :isbn
validates :name, :presence => true
validates :isbn. :presence => true, :uniqueness => true
end
classbooktrue
验证:isbn.:存在=>true,:唯一性=>true
结束
我的问题是,在我的SpineJS应用程序中,它很高兴地保存了一本带有重复ISBN号的新书,即使Rails服务器返回验证错误
是否有某种方法可以在客户端保存时处理此错误?Spine的手册声称:
如果验证在服务器端失败,这是客户端验证逻辑中的错误,而不是用户输入的错误
我不认为这能很容易地满足您的独特性要求。如果可以将可能影响验证的所有数据库数据加载到客户端,并且可以以某种方式避免所有多用户争用情况,那么这可能是可行的
您可以捕获“ajaxError”事件并告诉用户重试,尽管捕获“ajaxError”违背了手册中的建议。IIRC您可能还需要对对象ID进行一些处理,以使Spine相信实际上没有创建新记录
此外,您可以在用户编辑数据时发出先发制人的验证请求,但这只是为了方便用户。理论上,您仍然可以遇到竞争条件,即在用户点击save之前,其他人创建了冲突记录
就我个人而言,我改用了主干网,因为我发现Spine对错误处理的粗心态度太可怕了。Spine的手册声称:
如果验证在服务器端失败,这是客户端验证逻辑中的错误,而不是用户输入的错误
我不认为这能很容易地满足您的独特性要求。如果可以将可能影响验证的所有数据库数据加载到客户端,并且可以以某种方式避免所有多用户争用情况,那么这可能是可行的
您可以捕获“ajaxError”事件并告诉用户重试,尽管捕获“ajaxError”违背了手册中的建议。IIRC您可能还需要对对象ID进行一些处理,以使Spine相信实际上没有创建新记录
此外,您可以在用户编辑数据时发出先发制人的验证请求,但这只是为了方便用户。理论上,您仍然可以遇到竞争条件,即在用户点击save之前,其他人创建了冲突记录
就我个人而言,我改用了主干网,因为我发现Spine对错误处理的粗心态度太可怕了。为此,我刚从主干网过来,因为Spine的简单性吸引了我,但是我现在直接回去了,因为一个大型web应用程序Spine似乎有点太薄了……谢谢你,我刚从主干出来,因为脊椎的简单吸引了我,但是我现在直接回去了,因为一个大型web应用程序脊椎似乎有点太薄了。。。