【问题标题】:Sqlite questions regarding Id's关于 ID 的 Sqlite 问题
【发布时间】:2014-04-22 21:38:52
【问题描述】:

我在 Rails 上有一个 Web 应用程序,用户可以通过它提交存储在 sqlite DB 中的数据。当提交页面显示时,它会显示 DBID 编号,这将是该提交的 用户 ID 以供以后参考。有意义,因为它是一个唯一的数字

但是,我可以让这个号码以10000 开头,而不仅仅是1

==========================================

def create



@post = Post.new(post_params)
@post.save
redirect_to @post #this is the line that it errors on


end

顺便说一句,我得到的错误是......

undefined method `empty?' for 100029:Fixnum

【问题讨论】:

  • 下一个要分配的数字存储在数据库的控制表中,因此您可以更改它。使用任何 sqlite 客户端来检查数据库。您的目的是隐藏 URI 中的 id 或记录数吗?你可能想看看这个宝石...github.com/namick/obfuscate_id
  • 我去看看。更重要的是要有一个更实用的参考编号,看起来更实用。
  • 那个宝石看起来更像是随机的......这可能是一个选择。理想情况下,我希望 DB 提交说类似 10000,10001,10002.. 等...它是业务内部的,因此显示访问无关紧要。
  • 啊,哇!看起来它不喜欢将整数作为 to_param ......我从未意识到这是一个问题。我将发布一个替代解决方案。

标签: sql ruby-on-rails ruby sqlite


【解决方案1】:

好的,在您的用户类中...通过迁移添加一个名为“big_id_s”(字符串)的新列...

class User < ActiveRecord::Base
  after_create :create_big_id

  def to_param
    big_id_s
  end

  def create_big_id
    self.update_column(:big_id_s, (id + 100000).to_s)
    self
  end 
end

在您的控制器中,当您检索用户记录时(显示、编辑、更新、删除)使用这种格式来检索记录...

@user = User.find_by_big_id_s(params[:id])

【讨论】:

  • 好的,我已经离开几天了。请阅读本文并尝试一下,我会尽快让您知道结果。
  • 好吧,我想我错了。我在迁移文件中创建了 big_id 整数,并且可以在 rails 控制台中看到它。但是上面的代码是进入控制器还是创建的迁移文件?
  • 每次我提交一个新页面时,我都会在控制台中查看 big_id 字段显示为 nil
  • 上面的大部分代码应该在模型记录 app/models/uer.rb...@user = User.find_by_big_id 的行应该在你的控制器调用的方法中显示/编辑/更新/删除动作。您可以将其作为一种方法来执行,也可以在这些方法中的每一个中插入该行(这不那么 DRY)
  • 好的,我想我快到了,但还不完全。我现在有来自控制器的语法错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 2011-09-23
  • 2016-12-09
  • 2019-05-04
  • 2011-08-02
  • 1970-01-01
相关资源
最近更新 更多