在带有支架RESTful模型的全新Rails应用程序中,生成的删除代码如下所示:
class BeersController < ApplicationController
# DELETE /beers/1
# DELETE /beers/1.xml
def destroy
@beer = Beer.find(params[:id])
@beer.destroy
respond_to do |format|
format.html { redirect_to(beers_url) }
format.xml { head :ok }
end
end
end
Run Code Online (Sandbox Code Playgroud)
如果用户尝试删除相同的Beer两次(可能是快速双击,或者在两个不同的浏览器选项卡中执行操作),则会得到RecordNotFound错误,从而导致404页面.这是一个非常不友好的经历; 似乎最好将重定向完成,beers_url无论是否有flash错误,因为用户无法做任何关于第二次删除失败的事情.
另一种方法就是像删除一样成功,如下所示:
def destroy
@beer = Beer.find_by_id(params[:id])
destroyed = @beer.try(:destroy)
respond_to do |format|
format.html { redirect_to(beers_url) }
format.xml { destroyed ? head(:ok) : head(:not_found) }
end
end
Run Code Online (Sandbox Code Playgroud)
我可以理解API用例中出现硬404错误的愿望,但是我很难为Web应用程序辩护.任何人都可以提供一个很好的理由为什么我们应该以RESTfulness的名义向用户抛出一个可怕的错误?
(这个问题并不是Rails特有的,但我不知道其他框架如何处理这种情况).
作为入职流程的一部分,我们公司使用Trello API向我们的组织添加新用户.我们通过创建一个PUTto来添加用户/1/organizations/orgId/members,它返回新用户的JSON表示:
{
"id": "521baf66783e22e12f000040",
"confirmed": false,
"fullName": "Bradley Buda",
"memberType": "ghost",
"username": "bradleybuda4",
"email": "bradleybuda@example.com",
}
Run Code Online (Sandbox Code Playgroud)
(某些字段是匿名/删除的)
我们希望将此用户的ID存储在我们的系统中以用于簿记目的(因此我们可以在终止Bradley时删除该帐户).但是,当"ghost"用户实际加入组织时(通过单击邀请电子邮件中的链接),此用户记录将替换为全新的用户记录,具有不同的"id":
{
"id": "521bb6b018c2a109450001d7",
"confirmed": true,
"fullName": "Bradley Buda",
"memberType": "normal",
"username": "bradleybuda4"
}
Run Code Online (Sandbox Code Playgroud)
GET /1/organizations/orgId/members电话地址也不会在通话中返回,因此我们不能将其用作主键.我们可以使用它"username"来跟踪我们的Trello用户,但如果用户使用现有的Trello帐户(而不是创建新帐户)接受邀请,那么用户名也将更改.
是否有任何持久的方法来跟踪API创建用户的邀请接受?现在,我们必须在接受邀请后手动跟踪Trello帐户,我们希望这个过程完全自动化.我也查看了GET /1/organizations/orgId/membershipsAPI,但是idMembership当ghost用户离开时,这些ID()似乎也会发生变化.据我所知,当鬼用户消失时,没有任何webhook会触发.
我有一个Perl脚本试图将一些配置DateTime和DateTime::Duration实例设置为Readonly常量.但是,当我们尝试对这些对象进行数学运算时,我会看到奇怪的行为Readonly.这是一个最小的例子:
#!/usr/bin/perl -w
use strict;
use warnings;
use DateTime;
use Readonly;
Readonly my $X => DateTime->now;
my $x = DateTime->now;
Readonly my $Y => DateTime::Duration->new( days => 3 );
my $y = DateTime::Duration->new( days => 3 );
my $a = $X - $Y;
my $b = $x - $y;
print "$a\n";
print "$b\n";
Run Code Online (Sandbox Code Playgroud)
在我的系统(OSX上的Perl 5.10.0)上显示:
$ ./datetime_test.pl
Argument "2011-07-12T20:36:08" isn't numeric in subtraction (-) at ./datetime_test.pl line 15.
-4305941629
2011-07-09T20:36:08
Run Code Online (Sandbox Code Playgroud)
所以它看起来像制作DateTime …