1

我正在使用 Cequel 作为没有导轨的 Cassandra 的 ORM。
尝试创建简单的项目列表时遇到问题。首先,我用三列定义了模型,它们应该属于一个复合键。

class Project
  include Cequel::Record

  key :client, :text, { partition: true }
  key :type, :text, { partition: true }
  key :dep, :text, { partition: true }

end

后来当我尝试通过创建项目时

project = Project.create!({client: "test", type: "test", dep: "test"})

我收到表不存在的错误。这些表不是自动创建Project.create!的,但我必须先手动创建表:

  connection.schema.create_table(:projects) do 
    partition_key :client, :text
    partition_key :type, :text
    partition_key :dept, :text
  end

但是这种语法与记录的记录定义不同,我只是通过筛选源代码才找到它。但这会产生两个问题。

  • 代码开销
  • 我不知道的语法has_manybelongs_to因此如果记录包含此表,我将无法正确创建表

我是否忽略了从Project类定义中自动创建表的方法?

4

1 回答 1

1

可以通过调用synchronize_schema类上的方法来创建表。因此,在您的情况下,您应该Project.synchronize_schema在实际尝试读/写之前执行。

鉴于您正在构建一个更广泛的项目,您可以考虑为其使用 Rake 任务。您还需要迁移,以便在 Cassandra中实际创建表。你可以使用rake cequel:migrate它。您可以通过查看更多任务rake --tasks

如果您正在使用自定义模型位置创建自定义项目,您可能需要稍微修改 rake 迁移任务。这是我为我的项目https://github.com/octoai/gems/blob/master/octo-core/Rakefile#L75所做的一个实现。还要看看模型是如何定义的https://github.com/octoai/gems/tree/master/octo-core/lib/octocore/models

希望这可以帮助。

于 2016-07-23T07:24:34.323 回答