Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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 我可以用#to _signed _global _id获得稳定的签名id吗?_Ruby On Rails - Fatal编程技术网

Ruby on rails 我可以用#to _signed _global _id获得稳定的签名id吗?

Ruby on rails 我可以用#to _signed _global _id获得稳定的签名id吗?,ruby-on-rails,Ruby On Rails,目前我呼吁: Appointment.last.to\u signed\u global\u id.to\s #=>BAh7CEkiCGdpZAY6Bk…27c1175e6e2 预约。最后一次。到\u签名\u全局\u id到\u s #=>BAh7CEkiCGdpZAY6BkVU…0efc706151feed7178 有没有一种方法可以始终返回相同的签名全局id?我不理解您的用例,但对您的标题的简短回答是:是的,默认情况下,在记录上调用\u签名全局id是稳定的 我认为您的问题是将签名的ID转换

目前我呼吁:

Appointment.last.to\u signed\u global\u id.to\s
#=>BAh7CEkiCGdpZAY6Bk…27c1175e6e2
预约。最后一次。到\u签名\u全局\u id到\u s
#=>BAh7CEkiCGdpZAY6BkVU…0efc706151feed7178

有没有一种方法可以始终返回相同的签名全局id?

我不理解您的用例,但对您的标题的简短回答是:是的,默认情况下,在记录上调用
\u签名全局id
是稳定的

我认为您的问题是将签名的ID转换为字符串:
.to\s

从我的一个应用程序:

2.7.0 :002 > one = Element.first.to_sgid
  Element Load (0.5ms)  SELECT "elements".* FROM "elements" ORDER BY "elements"."id" ASC LIMIT $1  [["LIMIT", 1]]
2.7.0 :003 > two = Element.first.to_sgid
  Element Load (0.3ms)  SELECT "elements".* FROM "elements" ORDER BY "elements"."id" ASC LIMIT $1  [["LIMIT", 1]]
2.7.0 :004 > one == two
 => true 
2.7.0 :005 > one.to_s == two.to_s
 => false 

我可以从同一条记录中创建两个SignedGlobalID变量,并且它们彼此匹配,但是一旦我强制它们成为字符串,Base64就会与预期的不同。

是的,您可以获得带符号的全局ID。它不稳定,因为默认情况下,有一个过期的

要使签名的全局ID稳定,请将过期时间设置为零

appoint.last.to\u signed\u global\u id(expires\u in:nil)。to\u s

除非更改签名密钥,否则多次调用上述代码将始终生成相同的字符串结果。

对ID进行签名的目的是生成Base64字符串
GlobalID::Locator.locate_signed(Appointment.last.to_signed_global\u id.to_s)
应该总能找到预期的记录,那么为什么需要“稳定”Base64?@Chiperific我使用测试中生成的,并且需要检查重定向的url是否正确,例如,您可以只保存对象而不是字符串吗?如果你把
.to\s
从你的代码中删除会发生什么?我使用
to\s
是因为我在测试中生成了一个模型的url,并将其与动作重定向到的url进行比较,但是有不同之处,因此答案只是“不”,那么
.to\s
将与对象比较不匹配,那正是我想要的