gpt4 book ai didi

elixir - Ecto 模型中的大写字段

转载 作者:行者123 更新时间:2023-12-04 23:09:44 26 4
gpt4 key购买 nike

使用 Ecto 访问大写字段的最佳方式是什么?

我必须处理一个相当困惑的模式。有些列是大写的。

我设置了以下模型:

defmodule SourcesApi.SourceStatus do
use SourcesApi.Web, :model

# schema "source_statuses" do
schema "source_statuses" do
field :Hours_UnderOver, :integer
field :trafficlight, :string
...

timestamps
end

@required_fields ~w(Hours_UnderOver trafficlight)
@optional_fields ~w()

def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end

以及相应的 View :
defmodule SourcesApi.SourceStatusView do
use SourcesApi.Web, :view

def render("index.json", %{source_statuses: source_statuses}) do
%{data: render_many(source_statuses, SourcesApi.SourceStatusView, "source_status.json")}
end

def render("source_status.json", %{source_status: source_status}) do
%{status: source_status.trafficlight,
delay: source_status.Hours_UnderOver,
end
end

访问大写字段会产生以下错误:

== 文件 web/views/source_status_view.ex 上的编译错误 ==
** (CompileError) web/views/source_status_view.ex:12:别名必须在编译时扩展为原子,但在“source_status.Hours_UnderOver”中没有。如果要动态生成别名,请使用 Module.concat/2


大写的字段很难看,但完全有效。

Ecto 应该处理它们吗?

难道我做错了什么?我对 Elixir/Ecto 很陌生。

有没有办法在某个时候注入(inject)一个选择语句并重命名该字段?创建范围?

是否有一致的方式来访问所有字段?

最佳答案

只需替换字段名称:

source_status.Hours_UnderOver

经过:
source_status."Hours_UnderOver"

你应该很高兴。请在 Phoenix 问题跟踪器上打开一个问题,以便我们可以预先生成正确的代码。

关于elixir - Ecto 模型中的大写字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33726455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com