Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails SpineJS处理服务器端rails模型验证_Ruby On Rails_Ruby On Rails 3_Javascriptmvc_Spine.js - Fatal编程技术网

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应用程序脊椎似乎有点太薄了。。。