小编Myl*_*lly的帖子

Ecto has_many:通过形式

我试图has_many :through在Ecto中建立关系,以获得User模型和Group模型之间的许多关系.

我在网上找到的唯一信息与JoséValim 这篇文章中的嵌套属性有关(顺便说一下,这是非常好的).

由于这些组已经存在于系统中,我希望能够进行多选输入.这样做我遇到了几个问题.我不相信可以groups直接在变更集中分配关联,因为每次我尝试这样做时都会收到错误.我的下一个想法是手动完成工作(查找,删除和插入GroupMembership记录),但我不确定这是否是正确的路径,并希望首先得到一些建议.

由于代码示例有很多行,所以我在这里提出了一个要点.

如果我更喜欢直接在这个问题中发布,我当然可以这样做.

感谢您的帮助!

elixir ecto phoenix-framework

6
推荐指数
1
解决办法
1356
查看次数

使用ecto存储自定义信息

我正在重新实现我最初在 Phoenix 的 Rails 中编写的应用程序,其中用户可以使用 PostgreSQL 的 JSONB 记录类型创建自定义字段。例如,我们有以下(简化表示)模式:

客户

  • 身份证(整数)
  • 客户端类型 ID (int)
  • 名称(字符串)
  • 信息 (jsonb)

客户类型

  • 身份证(整数)
  • 名称(字符串)

自定义字段定义

  • 身份证(整数)
  • 客户端类型 ID (int)
  • 键(字符串)
  • 标签(字符串)

在 Rails 中,ActiveRecord 神奇地在 JSONB 和哈希之间转换,这使我可以使用 JSONB 非常轻松地存储一组无模式的自定义字段。

例如,每个客户端类型都可以定义不同的自定义字段,然后当我向用户显示信息时,我会遍历定义以获取键,然后我使用它从 JSONB 文档中获取数据。

我试图找出一种使用 Ecto 完成此操作的方法,看起来我应该查看嵌入式模式(我在这里看到了一些不错的信息),但是我认为通过查看它我无法定义一个在运行时自定义字段数量,可以吗?

我只是想就此寻求一些建议,因为到目前为止,这是我遇到的唯一一个几乎没有立即解决的真正障碍。

再次感谢,我很感激!

elixir ecto phoenix-framework

5
推荐指数
1
解决办法
926
查看次数

使用KMS时尝试将一些代码转换为Go CDK

我有一些代码可以从Google Cloud Storage上传和下载文件。下面是一个简短的示例:

import (
    "context"
    "io"
    "cloud.google.com/go/storage"
)

func upload(bucket, keyName, path string, reader io.Reader) error {
    ctx := context.Background()
    client, err := storage.NewClient(ctx)

    if err != nil {
        return err
    }
    defer client.Close()

    obj := client.Bucket(bucket).Object(path)
    writer := obj.NewWriter(ctx)

    defer writer.Close()

    writer.KMSKeyName = keyName

    if _, err = io.Copy(writer, reader); err != nil {
        return err
    }
    if err = writer.Close(); err != nil {
        return err
    }
    return nil
}
Run Code Online (Sandbox Code Playgroud)

棘手的部分是,我正在使用Google KMS来管理用于加密文件的密钥(Google的“客户管理的加密密钥”方案)。我的理解是这种加密发生在Google的一端。

我发现使用Go CDK的唯一解决方案是使用Google KMS加密文件,然后上传加密的Blob。没有办法像以前使用Go CDK一样指定加密密钥吗?

谢谢

go google-cloud-storage google-cloud-kms go-cdk

5
推荐指数
1
解决办法
124
查看次数

如何使Python PyQT程序不在Windows中打开命令行

我有一个大部分完整的Python程序,有一件事我想改变,这可能是也可能是不可能的.

这个程序使用PyQT显示一个GUI,我已经把它固定了,所以我想知道我打开程序时是否可以让Python不打开termianl.

我现在正在使用Windows XP,但它将运行的机器将是Windows 7.我通常使用Linux,因此我对Windows并不十分熟悉.

如果终端必须在那里,这没什么大不了的,但我觉得这在外面是无关紧要的.

谢谢!

windows pyqt4 python-3.x

2
推荐指数
1
解决办法
1579
查看次数