2016-06-13 31 views
0

我想添加'請注意,您必須再次選擇所有圖像和相關車輛。到任何驗證錯誤結束時,不管有多少錯誤,因此例如將此文本添加到每條錯誤消息的末尾不是一個選項,因爲如果存在多個錯誤,它將顯示多次。將某些文本添加到任何驗證錯誤消息的末尾

有什麼辦法可以將特定的文本添加到驗證錯誤消息的末尾嗎?

嘗試谷歌,但沒有發現任何東西。

+1

您可以將它添加到您在視圖中顯示錯誤的位置。這就是說我認爲適當的解決方案是不要求用戶重新選擇圖像和相關車輛,但這只是一個假設。 –

+0

當然,但現在必須離開它,因爲有更重要的事情要處理。明天將嘗試你的解決方案,但覺得應該有更好的方式,而不是把它放在視圖中。 –

回答

1

這很容易實現,但是根據您列出的驗證數量而定,這可能非常乏味。我將給出一些例子,以便您可以決定什麼是最適合您的需求:

如果使用Rails的內置驗證(例如prescence,uniqueness等),您可以在驗證中添加自己的消息以及標準輸出或用自己的完全替代它:

validates :username, :email, :title, :another_attribute,:omg_another_attribute, :password, presence: { :message => "cant be blank. Notice that you have to select all the images and related vehicles again for not filling out the form ya dumbo!"} 

這將列出每個字段的錯誤消息,他們留下的空白。如果您想在所有錯誤消息的末尾添加錯誤以提醒他們這個問題,您可以進行自定義驗證,檢查是否存在其他錯誤,然後在末尾添加一次自己的錯誤,如:

#Make sure to put this custom validate method after all the other validators since they are run in order from top to bottom and you want to see if the others have failed 
validate :add_blanket_error_when_one_or_more_errors_happen 

def add_blanket_error_when_one_or_more_errors_happen 
    if self.errors.count > 0 then self.errors.add(:base, "Notice you were being dumb again and now have to fill more stuff out.") end 
end 

我通常會將這樣的一般錯誤添加到「基本」字段,但如果您不想添加額外的樣式/標記,則可以將其附加到表單中的任何字段。在你看來,如果你選擇了將其添加到「基地」字段您可以直接在表格上把這個消息如果存在這樣做:

 <% unless @the_form_object_youre_using_here.errors[:base].blank? %> 
     <div> 
      <span class="error-explanation"><%= @again_the_form_object_here.errors[:base].first %></span> 
     </div> 
     <% end %> 

這也將讓你的風格跨度等。

不幸的是,您可以添加到您的模型中沒有簡單的單線程來追加一個毯子消息到所有失敗的驗證。甚至嘗試看似無害的東西,像一個自定義驗證,以實現它(不要試試這個,除非你有你的任務管理器準備,因爲它會導致內存泄漏,甚至讓你的電腦崩潰,如果你不殺死的過程很快)

**DONT DO IT IF YOU ENJOY COORS LIGHT OR PREFER LONG WALKS ON THE BEACH** 

    validate :append_messages_to_all_failed_validations 

    def append_messages_to_all_failed_validations 
    self.errors.each do |attribute, error| 
     #**YOU SHOULDNT BE DOING THIS LOL** 
     self.errors[attribute.to_sym] = "#{error} plus some" 
    end 
    end 
相關問題