【问题标题】:rails: create a single table without idrails: 创建一个没有 id 的表
【发布时间】:2010-07-28 13:59:44
【问题描述】:

我刚刚在 rails 中生成了我的第一个脚手架。现在,我不希望我的表有一个名为“id”的字段。相反,我希望它被命名为“uid”,这将是一个任意字符串。但我似乎无法理解如何做到这一点。尤其是管理路线。我已经设法设置 :id=>false 并将“uid”定义为主键,但控制器失败了,因为它仍然试图通过 id 查找。我该如何处理?

另外,还有什么我不知道的可能会爆炸吗?

而且,我知道 Rails 完全是关于惯例的,我不能试图违背“rails 方式”,但我真的希望这件事能以这种方式工作。

【问题讨论】:

    标签: ruby-on-rails routing


    【解决方案1】:

    在您的迁移中更新您的代码,如下所示:

    create_table :table_name, :primary_key => :uid do |t|
    ...
    end
    

    而且你的模型应该包含这一行:

    class ModelName < ActiveRecord::Base
      set_primary_key :uid
    end
    

    所有操作都与普通 id 列相同。

    Model.find 将通过 uid,而不是 id 等查找...

    【讨论】:

      【解决方案2】:

      您应该可以通过以下方式找到记录:

      @record = Model.find('foo')
      

      @record = Model.find_by_uid('foo')
      

      【讨论】:

        【解决方案3】:

        确保在您的迁移文件中有:

        create_table :table_name, :primary_key => :uid do |t|
        ...
        

        然后插入你的模型:

        self.primary_key = "uid"
        

        按照 John Topley 的说法找到您的记录:

        @record = Model.find('foo')
        

        这应该可行

        【讨论】:

          【解决方案4】:

          现有的答案虽然对旧版本很好,但已经过时,所以这里是更新:

          (建立在复古的 +1 答案之上:)

          迁移:

          create_table :table_name, id: false, :primary_key => :uid do |t|
          ...
          end
          

          型号:

          class ModelName < ActiveRecord::Base
            self.primary_key= :uid
          end
          

          注意:我相信这个变化可以追溯到~rails 3,但是我对此不是100%确定的。

          快乐的编码。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-11-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-01
            • 1970-01-01
            • 1970-01-01
            • 2022-12-13
            相关资源
            最近更新 更多