【问题标题】:Non-auto-increment rails/postgresql column非自动增量 rails/postgresql 列
【发布时间】:2012-06-28 15:05:46
【问题描述】:

我正在尝试创建一个包含重复信息的模型/表格。这样做的原因是为了可以将相同的数据写入不同用户下的表中,并为每个用户找到。但是,我想要一种快速简便的方法来识别哪些信息与其他信息重复。我认为最好的方法是让 item_id 的排序随着表中的每个“集合”条目而增加。有没有办法在不包含另一个存储信息而不将其归属于用户的表的情况下做到这一点?

【问题讨论】:

    标签: ruby ruby-on-rails-3 postgresql-9.1


    【解决方案1】:

    这就是我设置你的关联的方式:

    class User < ActiveRecord::Base
     has_many :records
    end
    
    
    class Record < ActiveRecord::Base
     belongs_to :user :foreign_key => user_id
    end
    

    那么你必须在保存记录之前将 user_id 属性设置为 current_user 的 id。

    您可以通过以下方式检索行:

    User.first.records
    Record.first.user
    

    【讨论】:

    • 这不是我想要的。 “集合”不是由用户定义的,而是由创建数据的操作定义的。例如,一个用户在博客上写一篇文章会生成两条记录,每条记录都包含相同的数据,但一条 owner_id 是用户,另一条 owner_id 是产品。我想为这两条记录分配一个唯一的 ID
    • 请包含您现有的模型和创建操作,以便我们更好地理解。
    【解决方案2】:

    实际上我正在寻找的是一个 PostgreSQL 序列。这是我最终在迁移中使用的代码

    def up
      ActiveRecord::Base.connection.execute("create sequence action_id_seq;")
    end
    
    def down
      ActiveRecord::Base.connection.execute("drop sequence action_id_seq;")
    end
    

    然后在查询时我使用

    Action.find_by_sql("SELECT NEXTVAL('action_id_seq') AS action_id").first.event_id
    

    出于我的目的,这工作得相当好,我可以使用它来拥有一个我控制增量的唯一 ID。

    【讨论】:

      猜你喜欢
      • 2016-08-19
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 2015-09-03
      相关资源
      最近更新 更多