当管理员在我们的Rails 4应用程序中生成一个新客户端时,我正在尝试自动生成一个“客户号”。
我读过几篇关于这方面的文章,但大多数都是关于易碎令牌的。
到目前为止,我的客户端模型只有一个client_number属性,而且它是一个字符串。
我的模型看起来:
class Client < ActiveRecord::Base
before_save generate_client_number
validates_uniqueness_of :client_number
def generate_client_number
self.client_number = SecureRandom.hex(2).upcase
end
end我们使用PostgreSQL作为我们的DB,我对rails比较陌生。在将上述内容添加到我们的模型之后,它在控制台中出错--这是它抛出的错误:
NameError: undefined local variable or method `generate_client_number' for #<Class:0x007fc59bdd7008>
Did you mean? generated_attribute_methods我有点不知道我在这里哪里出了问题。任何援助都将不胜感激,我相信这是我的疏忽。提前谢谢。
编辑#1:
通过修正代码错误,消除了错误。加上
before_save :generate_client_number但是,当我尝试创建随机字符串并保存到db时,我现在得到:
irb(main):013:0> Client.create
(0.1ms) BEGIN
Client Exists (0.2ms) SELECT 1 AS one FROM "clients" WHERE "clients"."client_number" IS NULL LIMIT 1
(0.1ms) ROLLBACK
=> #<Client id: nil, client_number: nil, created_at: nil, updated_at: nil> 发布于 2016-05-10 05:28:18
这只是一个正确使用符号的问题:
before_save :generate_client_number这些after_*和before_*钩子是由一个符号定义的,该符号具有调用的方法的名称,因此您需要使用来编写,而不是只编写generate_client_number。
关于它不是生成一个数字的事实,您的错误消息意味着您正在得到一个复制和有一个roolback。我建议你试试
self.client_number = SecureRandom.uuid.upcase发布于 2016-05-10 05:52:02
我在这里补充我自己的答案,以及我已经解决了这个问题,
看来,当我第一次尝试创建一个客户机时,它保存了一个记录,其中包含了一个零ID,我是如何或者为什么不知道。然而,吹掉客户端记录并从头开始解决了我的问题。谢谢你的意见。
https://stackoverflow.com/questions/37129796
复制相似问题