7

我正在使用simple_form gem。我想自定義用戶驗證失敗時顯示的錯誤消息。我怎樣才能做到這一點?使用simple_form自定義錯誤消息

+1

是否要自定義錯誤消息或錯誤消息的風格disolayed? – rubyprince 2011-04-27 18:34:16

+0

我最初的意思是錯誤信息的內容,但我也有興趣定製風格。對不起,不清楚。 – 2011-04-27 18:47:07

回答

3

您可以輕鬆地更改翻譯文件中的默認錯誤消息,該文件位於config/locales/simple_form.en.yml中。

在特定的初始化程序config/initializers/simple_form.rb中,您可以否決如何生成html的默認選項。

希望這會有所幫助。

爲了完整,我想補充一點,formtastic是一個更容易的選擇,因爲它有一個默認佈局。我很喜歡simple_form,但它並不提供任何格式,但這是他們的意圖。使用Formtastic很難(不可能)更改生成的html,並且使用simple_form可以完全根據自己的喜好生成生成的html。如果你有一個設計者,這是特別有用的,你生成的表格必須生成相同的html。所以如果你開始了,formtastic會更快地給你看起來更漂亮的結果。還要注意,切換非常容易,因爲語法幾乎完全相同。

+0

更改'simple_form.en.yml'中的默認錯誤消息的語法是什麼?如果你有兩個驗證屬性,如':presence => true'和':format => ...'?你將如何爲每個消息提供不同的消息? – 2011-04-27 20:28:50

+0

標準驗證消息與simple_form無關,但是標準的ActiveRecord。您可以在驗證中明確聲明消息,也可以檢查標準消息的定義(以及如何覆蓋它們)的https://github.com/svenfuchs/rails-i18n。 – nathanvda 2011-04-27 21:14:19

+0

有沒有辦法配置simple_form將標籤和錯誤消息鏈接到默認的activerecord i18n yaml? – Matthias 2016-04-02 11:23:31

15
  1. 你可以聲明 錯誤消息的內容在你的模型:

    validates_length_of :name, :minimum => 5, :message => "blah blah blah" 
    
  2. 可以設置idclass您 錯誤標籤:

    <%= f.input :name, :error_html => { :id => "name_error"} %> 
    

    然後你可以使用CSS進行造型。

  3. 你也可以使用

    <%= f.error :name, :id => "name_error" %> 
    

    ,你會得到

    <span class="error" id="name_error">is too short (minimum is 5 characters)</span> 
    
5

我不知道它是simple_form寶石有什麼不同。

有關要更改錯誤消息的內容,可以使用模型中的:message屬性。

class User < ActiveRecord::Base 
    validates :email, {:presence => true, :message => "is not filled up."} 
end 

現在驗證信息將是Email is not filled up。如果你想要的字段名稱也將被改變(EmailE-mail address類似的東西),這種方法現在在locales.rb文件來定義它像這樣

# config/locales/en.yml 
en: 
    activerecord: 
    attributes: 
     user: 
     email: "E-mail address" 

link關於locales細節。另一種方法是在模型中定義,人性化的屬性是這樣的:

class User < ActiveRecord::Base 
    validates :email, {:presence => true, :message => "is not filled up."} 
    HUMANIZED_ATTRIBUTES = { 
    :email => "E-mail address", 
    ...(other fields and their humanized names) 
    ... 
    } 

    def self.human_attribute_name(attr, options={}) 
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super 
    end 

end 

有關自定義驗證消息的風格,我們將不得不修改樣式 #errorExplanation.fieldWithErrors,在scaffold.css樣式表。