首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试生成一个随机字符串以将PG表保存为client_number Rails 4,PGSQL

尝试生成一个随机字符串以将PG表保存为client_number Rails 4,PGSQL
EN

Stack Overflow用户
提问于 2016-05-10 05:17:06
回答 2查看 73关注 0票数 1

当管理员在我们的Rails 4应用程序中生成一个新客户端时,我正在尝试自动生成一个“客户号”。

我读过几篇关于这方面的文章,但大多数都是关于易碎令牌的。

到目前为止,我的客户端模型只有一个client_number属性,而且它是一个字符串。

我的模型看起来:

代码语言:javascript
复制
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比较陌生。在将上述内容添加到我们的模型之后,它在控制台中出错--这是它抛出的错误:

代码语言:javascript
复制
NameError: undefined local variable or method `generate_client_number' for #<Class:0x007fc59bdd7008>
Did you mean?  generated_attribute_methods

我有点不知道我在这里哪里出了问题。任何援助都将不胜感激,我相信这是我的疏忽。提前谢谢。

编辑#1:

通过修正代码错误,消除了错误。加上

代码语言:javascript
复制
before_save :generate_client_number

但是,当我尝试创建随机字符串并保存到db时,我现在得到:

代码语言:javascript
复制
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> 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-10 05:28:18

这只是一个正确使用符号的问题:

代码语言:javascript
复制
before_save :generate_client_number

这些after_*和before_*钩子是由一个符号定义的,该符号具有调用的方法的名称,因此您需要使用来编写,而不是只编写generate_client_number。

关于它不是生成一个数字的事实,您的错误消息意味着您正在得到一个复制和有一个roolback。我建议你试试

代码语言:javascript
复制
self.client_number = SecureRandom.uuid.upcase
票数 1
EN

Stack Overflow用户

发布于 2016-05-10 05:52:02

我在这里补充我自己的答案,以及我已经解决了这个问题,

看来,当我第一次尝试创建一个客户机时,它保存了一个记录,其中包含了一个零ID,我是如何或者为什么不知道。然而,吹掉客户端记录并从头开始解决了我的问题。谢谢你的意见。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37129796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档