Ruby对象映射器-如何更改Create命令中的默认顺序字段?

Ruby对象映射器-如何更改Create命令中的默认顺序字段?,ruby,ruby-object-mapper,Ruby,Ruby Object Mapper,我目前正在从事一个项目,我想在现有的sql数据库中使用Ruby对象映射器。执行create命令时遇到问题,默认情况下,返回的结果似乎按table_name.id排序。这是一个问题,因为我正在使用的现有表的主键名不是id,它会导致未知列“id”出现异常 我只是想知道是否有任何可能的方法来更改默认订单列?刚刚从Github得到答案: 这是一个与rom-sql()相关的问题 解决方案是在命令关系中显式声明数据集。试着这样做: class MyRelation < ROM::Relation[:s

我目前正在从事一个项目,我想在现有的sql数据库中使用Ruby对象映射器。执行create命令时遇到问题,默认情况下,返回的结果似乎按
table_name.id
排序。这是一个问题,因为我正在使用的现有表的主键名不是
id
,它会导致
未知列“id”出现异常


我只是想知道是否有任何可能的方法来更改默认订单列?

刚刚从Github得到答案:

这是一个与rom-sql()相关的问题

解决方案是在命令关系中显式声明数据集。试着这样做:

class MyRelation < ROM::Relation[:sql]
  dataset { order(:my_column) }
end

你能举一个你的模式的例子吗?删除ID列通常是一个错误。为什么不能在用作主键的另一列上添加辅助索引呢?例如,我有一个
accounts
表,它没有
id
列,但有一个
twt\u account\u id
列作为主键。其背后的原因是,这些表用于存储来自第三方API(如Twitter)的实体,我们决定给它另一个名称,以避免与通常是内部的
id
混淆。另外,数据库已经在生产中很长时间了,并且有很多数据。定义“很多”吗?调整模式是否不切实际?Ruby对象映射器是这里唯一可以使用的ORM吗?在这种情况下,您应该有自己的内部
id
列,然后在
twt\u账户id
之类的内容上有一个次要的、可能是唯一的
索引,这是一个外部标识符。通常,ORM中有一个选项用于为主键指定备用名称。可以调整架构,但工作量很大(1.有其他项目使用该架构。2.数百万行数据受到影响。隐藏的问题可能会影响生产)。我同意转换ORM是一种选择。然而,如果SQL数据库允许您使用不同的主键作为一项功能,那么为什么使用这种数据库的ORM不也支持这种功能呢?如果您遇到了软件的限制,那么尝试搜索他们的票证并查看以前是否出现过这种情况并没有什么坏处。我直接使用过,它对我很好,所以你可能想评估一下这种方法。
rom_container = ROM.container(:sql, 'mysql2://root@localhost/db_name') do |rom|
  rom.use :macros

  rom.relation(:users) do |r|
    r.primary_key :my_column
    r.dataset { order(:my_column) }
  end
end