2016-06-18 8 views
2

を実装していない、私はポストを提出するには簡単な検証フェニックス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

を取得していますにレンダリングする図であり、私が持っていました完全

更新働いていた(また、フェニックスのドキュメントで)別のフェニックスアプリで同様の検証 - 以前のアプリが古いエクトと鳳凰のバージョンを使用して使用していたが、私はエクト2.0 +とフェニックス1.1、

で、現在午前

答えて

6

Changesetにエラーメッセージを表示する正しい方法は、MyApp.ErrorHelpers.translate_error/1を使用することです。

置き換え:デモ

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

<li><%= humanize(attr) %> <%= 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

関連する問題