gpt4 book ai didi

elixir - Phoenix Phoenix.HTML.Safe 未实现

转载 作者:行者123 更新时间:2023-12-02 08:20:15 31 4
gpt4 key购买 nike

在我的帖子模型上,我实现了一个简单的验证

  def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> validate_length(:content, min: 2)
|> validate_length(:content, max: 500)
end

在提交 Post 创建表单 View 时,如果用户提交有问题,我想显示错误,这里是呈现错误的 View

<%= form_for @changeset, @action, fn f -> %>
<%= if @changeset.action do %>
<div class="alert alert-danger">
<p>Oops, something went wrong! Please check the errors below:</p>
<ul>
<%= for {attr, message} <- f.errors do %>
<%IEx.pry%>
<li><%= humanize(attr) %> <%= message %></li>
<% end %>
</ul>
</div>
<% end %>

我收到此错误 (Protocol.UndefinedError) protocol Phoenix.HTML.Safe not implemented for {"should be at least %{count} character(s)", [count: 2]}
(phoenix_html) lib/phoenix_html/safe.ex:74: Phoenix.HTML.Safe.Tuple.to_iodata/1

我不知道为什么会这样,我在另一个完美运行的 phoenix 应用程序(也在 phoenix 文档中)进行了类似的验证

更新 - 较早的应用程序使用的是较旧的 Ecto 和 phoenix 版本,我目前使用的是 Ecto 2.0 + 和 Phoenix 1.1,

最佳答案

在变更集中显示错误消息的正确方法是使用 MyApp.ErrorHelpers.translate_error/1 .

替换:

<li><%= humanize(attr) %> <%= message %></li>

<li><%= humanize(attr) %> <%= translate_error(message) %></li>

演示:

iex(1)> MyApp.ErrorHelpers.translate_error {"should be at least %{count} character(s)", [count: 2]}
"should be at least 2 character(s)"

关于elixir - Phoenix Phoenix.HTML.Safe 未实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37897217/

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