Buraya yeni bir küçük parça getirmek istiyorum:
Bu yüzden, "Bir Uygulama" nın istediği sonucu elde etmenin daha kolay bir yolunu buldum.
Öncelikle, Devise eklentisi içinde herhangi bir şeyi özelleştirmek istiyorsanız, "\ Ruby_repertory \ lib \ ruby \ gems \ 1.9.1 \ gems \ devise-version \ app \ controllers'daki kodu kopyalamanızı şiddetle tavsiye ederim. | yardımcılar | postacılar ... "projenizde istediğiniz dosyaya.
[Düzenle] Veya dosyanızı "normal" düzenlenmiş dosyalardan devralmasını sağlayabilirsiniz ... Mesela ... Diyelim ki ... Kullanıcılarınızın ilk satırı olan devise / registrations_controller.rb içinde yalnızca bir işlevin üzerine yazmak istiyorsunuz kayıt denetleyicisi:
class Users::RegistrationsController < Devise::RegistrationsController
[Düzenleme 7 Ağustos 2013] Now Devise, denetleyiciler oluşturmak için bir araç bile sağlıyor: https://github.com/plataformatec/devise/wiki/Tool:-Generate-and-customize-controllers
Yani ... her neyse ... "AnApprentice" in sadece bunu yazarken istediği şeyi almayı başardım (daha temiz bir çözüm için, aşağıdaki büyük düzenlemeye bakın):
#/my_project/app/helpers/devise_helper.rb
module DeviseHelper
def devise_error_messages!
return "" if resource.errors.empty?
return resource.errors
end
end
Ve benim görüşüme göre, sonraki satırlar oldukça iyi çalıştı:
<% devise_error_messages!.each do |key, value| %>
<div class="flash <%= key %>"><%= key %> <%= value %></div>
<% end %>
Peki ... o zaman bunun gibi belirli bir öznitelik için hatalara erişebilirsiniz:
#Imagine you want only the first error to show up for the login attribute:
<%= devise_error_messages![:login].first %>
Ve ... Her özellik için yalnızca bir hatanın (ilk yakalanan) görünmesi için küçük bir numara:
<% if resource.errors.any? %>
<% saved_key = "" %>
<% devise_error_messages!.each do |key, value| %>
<% if key != saved_key %>
<div class="flash <%= key %>"><%= key %> <%= value %></div>
<% end %>
<% saved_key = key %>
<% end %>
<% end %>
Bu sorunun gönderilmesinden bu yana epey zaman geçtiğini biliyorum, ancak bunun pek çok kullanıcı için faydalı olacağını düşünüyorum :).
Büyük Düzenleme:
Kodumu genişletmeyi, daha temiz hale getirmeyi ve başkalarıyla paylaşmayı sevdiğim için, son zamanlarda devise_error_message'ları değiştirmek istedim! yöntemini kendi görüşlerimde kullanmak ve yukarıda anlattığım hileyi göstermesini sağlamak için.
İşte benim yöntemim:
def devise_error_messages!
html = ""
return html if resource.errors.empty?
errors_number = 0
html << "<ul class=\"#{resource_name}_errors_list\">"
saved_key = ""
resource.errors.each do |key, value|
if key != saved_key
html << "<li class=\"#{key} error\"> This #{key} #{value} </li>"
errors_number += 1
end
saved_key = key
end
unsolved_errors = pluralize(errors_number, "unsolved error")
html = "<h2 class=\"#{resource_name}_errors_title\"> You have #{unsolved_errors} </h2>" + html
html << "</ul>"
return html.html_safe
end
Burada önemli değil, kendi görüşüme göre yazdığım kodu yalnızca bir hata pey özniteliğini göstermek için yeniden kullandım, çünkü genellikle ilk olan tek alakalı olandır (kullanıcının bir gerekli alanı unutması gibi).
Bu "benzersiz" hataları sayıyorum ve çoğullaştırmayı kullanarak bir H2 HTML başlığı yapıyorum ve bunu hata listesinden ÖNCE koyuyorum.
Şimdi, "devise_error_messages!" varsayılan olarak ve daha önce zaten oluşturduğum şeyi tam olarak işliyor.
Görünümünüzde belirli bir hata mesajına erişmek istiyorsanız, şimdi doğrudan "resource.errors [: öznitelik] .first" veya başka bir şey kullanmanızı tavsiye ederim.
Seya, Kulgar.