2016-04-24 83 views
1

當我在變更集中有一些驗證錯誤時,我希望能夠對最終用戶說:「信用卡不能爲空」或更復雜的內容,例如:「 你的真棒信用卡不能爲空「。鳳凰框架中的自定義屬性錯誤

總之我想的是相同的特徵: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(場)

我想我可以拿出一個hacky的gettext解決方案,來翻譯字段來達到我的目標,但我認爲這是一個很大的禁忌。

Phoenix不提供類似的東西嗎? 如果不是,解決這個問題的最好方法是什麼?

回答

3

嘗試使用發電機來檢查鳳凰請問是:

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將確保出現在錯誤的地方應該。如果您需要翻譯錯誤消息,則可以使用gettext內部模型。

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