在阅读 CouchDB 权威指南 (here) 中的这段之后:
If you have multiple design documents, each with a validate_doc_update function, all of those functions are called upon each incoming write request. Only if all of them pass does the write succeed. The order of the validation execution is not defined. Each validation function must act on its own.
我想知道是否有任何好的做法来处理多个 validate_doc_update 函数?
我的意思是:只创建一个带有 validate_doc_update 字段的设计文档还是创建多个较小的设计文档更好?
在第一种情况下,可以确定没有一个验证函数会干扰另一个,但如果需要很多控件,该函数可能会变得非常大。
另一方面,几个较小的函数可能更容易阅读和演变,但必须确定每个函数的用途,不要与其他函数混淆。
另外,让每个设计文档都包含一个验证函数有什么意义?例如,在 View 文档中存储一个似乎有点脏,但为了保存一个小的验证功能而创建多个设计文档对我来说也不是很聪明。
你怎么看?
我可能漏掉了什么,这就是我的问题,关于管理多个 validate_doc_update 函数有什么好的做法吗?
最佳答案
请注意,我写了引用的段落。
一般来说,我发现应用程序和设计文档之间存在 1:1 的相关性。单个应用程序所需的一切都应该在一个设计文档中。较大的应用程序可能出于各种原因(如不同的 View 组)希望依赖多个设计文档,但一般来说,每个应用程序一个设计文档是一个很好的经验法则。
现在,每个数据库可能有多个应用程序。例如。 CMS:一个应用程序可以是面向公众的 CMS 查看应用程序,另一个应用程序可以是管理界面。您希望将它们分开,因为它们是两个不同的应用程序,对相同的数据进行操作,将它们分开是一个很好的组织理念。应用不同的安全机制,因此您有两个验证函数,它们确实实现了适用于相应应用程序的内容。
引用的段落是对您确实(无论出于何种原因)每个数据库有多个设计文档的情况的定义。它解释了会发生什么。这并不意味着如何拆分事物的指南。按照每个应用程序的经验法则使用一个设计文档,大多数情况下你都很好。
关于javascript - CouchDB 设计文档中的多个 validate_doc_update 函数。有什么好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5437118/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我在我的Rails3示例应用程序上使用CarrierWave。我想验证远程位置上传,因此当用户提交无效URL(空白或非图像)时,我不会收到标准错误异常:CarrierWave::DownloadErrorinImageController#createtryingtodownloadafilewhichisnotservedoverHTTP这是我的模型:classPaintingtrue,:length=>{:minimum=>5,:maximum=>100}validates:image,:presence=>trueend这是我的Controller:classPaintingsC
我正在尝试使用“updated_at”字段的日期时间范围查询数据库。前端在JSON数组中发送查询:["2015-09-0100:00:00","2015-10-0223:00:00"]在RailsController中,我使用以下方法将两个字符串解析为DateTime:start_date=DateTime.parse(params[:date_range_arr][0])end_date=DateTime.parse(params[:date_range_arr][1])#...@events=@events.where('updated_atBETWEEN?AND?,start_d
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我正在尝试将自定义方法与here-doc一起使用,并希望传递参数(没有业务案例,我只是想学习ruby)。在这种情况下有没有办法传递参数?这是我目前所拥有的。方法简单,效果很好。defmeth1self.upcaseendstr1=现在,我想让我们放弃一些参数并尝试不同的变体,irb给了我一个茫然的眼神。#variation1defmeth2( 最佳答案 我猜这就是您要尝试做的:defmeth2(str1,str2)str1.upcase+"..."+str2.downcaseendstr2=meth2("SOMESTRING\n
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我正在尝试实现state_machinegem,在我的rails项目中,我安装了gem,然后我将“state”列添加到我的account_entries模型中:defchangeadd_column:account_entries,:state,:stringend然后在我的account_entries模型中,我添加了状态机初始方法,如下所示:state_machine:state,:initial=>:submitteddoend然后在我看来我显示时间进入状态:account_entry.state但是当我尝试从我的应用程序创建一个account_entry时,我得到了这个错误:p
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
在Rails中,update_attributes!的逆运算是什么?换句话说,是什么将记录映射到属性散列以重新创建该记录及其所有子记录?答案不是ActiveRecord.attributes,因为它不会递归到子对象中。澄清您是否有以下情况:classFoo然后你可以像这样传递一个散列{"name"=>"afoo","bars_attributes"=>[{"name"=>"abar}...]}到update_attributes。但目前尚不清楚如何为此目的以编程方式轻松生成这样的哈希值。编辑:正如我在评论中提到的,我可以做类似的事情:foo.as_json(:include=>:bar