나는 단지 여기에 새로운 작은 조각을 가져오고 싶다.
그래서 "AnApprentice"가 원하는 결과를 얻는 더 쉬운 방법을 찾았습니다.
우선, Devise 플러그인 내에서 어떤 것을 사용자 정의하려면 "\ Ruby_repertory \ lib \ ruby \ gems \ 1.9.1 \ gems \ devise-version \ app \ controllers에서 코드를 복사하는 것이 좋습니다. | helpers | mailers ... "를 프로젝트에서 원하는 파일에 추가하십시오.
[편집] 또는 파일을 "일반"고안 파일에서 상속하도록 할 수 있습니다 ... ...처럼 ... 말 ... 사용자 정의의 첫 줄인 devise / registrations_controller.rb 내에서 하나의 함수 만 덮어 쓰려고합니다. 등록 컨트롤러는 다음과 같습니다.
class Users::RegistrationsController < Devise::RegistrationsController
[2013 년 8 월 7 일 편집] 이제 Devise는 컨트롤러 생성 도구를 제공합니다. https://github.com/plataformatec/devise/wiki/Tool:-Generate-and-customize-controllers
그래서 ... 어쨌든 ... 나는 "AnApprentice"가 이것을 쓰고 싶었던 것을 얻을 수있었습니다.
#/my_project/app/helpers/devise_helper.rb
module DeviseHelper
def devise_error_messages!
return "" if resource.errors.empty?
return resource.errors
end
end
그리고 내 견해로는 다음 줄이 꽤 잘 작동했습니다.
<% devise_error_messages!.each do |key, value| %>
<div class="flash <%= key %>"><%= key %> <%= value %></div>
<% end %>
음 ... 그러면 다음과 같은 특정 속성의 오류에 액세스 할 수 있습니다.
#Imagine you want only the first error to show up for the login attribute:
<%= devise_error_messages![:login].first %>
그리고 ... 속성 당 하나의 오류 (첫 번째로 잡히는) 만 표시하는 작은 트릭입니다.
<% 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 %>
나는이 질문이 게시 된 지 오래되었다는 것을 알고 있지만 많은 개발자를 찾는 데 도움이 될 것이라고 생각합니다. :).
큰 편집 :
코드를 확장하고 더 깨끗하게 만들고 다른 사람들과 공유하기를 좋아하면서 최근에 devise_error_messages를 변경하고 싶었습니다! 내보기에 사용하고 위에서 설명한 트릭을 표시하기 위해.
그래서, 여기 내 방법이 있습니다 :
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
여기서 큰 문제는 없었습니다. 내가 작성한 오류 코드 하나만 표시하기 위해 필자가 작성한 코드를 재사용했습니다.
이 "고유 한"오류를 세고 있으며 복수형을 사용하여 H2 HTML 제목을 만들고 오류 목록보다 먼저 표시합니다.
이제 "devise_error_messages!"를 사용할 수 있습니다 기본으로 사용하고 이전에 이미 렌더링 한 것과 정확하게 렌더링합니다.
보기에서 특정 오류 메시지에 액세스하려면 "resource.errors [: attribute] .first"등을 직접 사용하는 것이 좋습니다.
세야, 쿨 가르