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
将与对象比较不匹配,那正是我想要的