2016-06-18 6 views
2

На моей почтовой модели я реализовал простую проверкуPhoenix Phoenix.HTML.Safe не реализован

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

О представлении Почта создать сформировать мнение, я хотел бы показать ошибки, если что-то случилось с представление пользователя, здесь вид, что делает ошибку

<%= 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

Я не могу выяснить, почему это происходит, у меня был аналогично проверки в другой феникс приложение (также в феникса документации), который работал отлично

Update - Чем раньше приложение использует использует старую экто- и феникс версию, я в настоящее время на Ecto 2.0 + и Phoenix 1.1,

ответ

6

Правильный способ отображения сообщения об ошибке в наборе изменений - использовать 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)" 
+0

Спасибо, я не понял, что мое приложение использует экто 2.0 – coderVishal

+0

Я считаю, что он был добавлен в Финиксе 1.1 вместе с Gettext (http://www.phoenixframework.org/blog/upgrading-from-v10-to-v11) и не имеет отношения к Ecto 2.0. – Dogbert

+0

Я вижу, я скопировал шаблон из старой версии phoenix, спасибо – coderVishal