凤凰框架中的自定义属性错误

时间:2016-04-24 15:55:32

标签: elixir phoenix-framework

当我在变更集中遇到一些验证错误时,我希望能够对最终用户说:" 信用卡不能为空白"或者某事更复杂,例如:" 您真棒信用卡不能为空白"。

简而言之,我想要同样的功能:http://gothamjs.io/documentation/1.0.0/validator#change-attributes

我没有在指南上找到类似的东西,所以我提出了这个:

error_helpers.ex

  @doc """
  Generates tag for inlined form input errors.
  """
  def error_tag(form, field) do
    if error = form.errors[field] do
      content_tag :span,  to_string(field) <> " " <> translate_error(error), class: "help-block"
    end
  end
  

你可以看到我刚刚添加了 to_string(字段)

我想我可以拿出一个带有gettext的hacky解决方案来翻译该字段以达到我的目标,但我认为这是一个很大的禁忌。

凤凰不提供开箱即用的东西吗? 如果没有,那么解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

尝试使用生成器检查Phoenix如何做到这一点:

self.$addChild is not a function

要添加错误,您需要检查两个地方。第一个是模型。在变更集功能中,您可以添加:

mix phoenix.gen.html User users name credit_card

validate_length(:credit_card, min: 1, message: "your awesome credit card...") 字段为空时,这会向给定消息添加验证错误。

第二个是模板:你需要使用:

:credit_card

<%= form_for @changeset, @actoin, fn f -> %> <%= if @changeset.action do %> <div class="alert alert-danger"> <p>Something wrong</p> </div> <% end %> <div class="form-group"> <%= label f, :credit_card %> <%= text_input f, :credit_card %> <%= error_tag f, :credit_card %> </div> <% end %> 将确保您的错误出现在应有的位置。如果您需要翻译错误消息,可以在模型中使用error_tag

您可能不必触摸生成的控制器。