ここに新しい小さな作品を持ち込みたいだけです。
そこで、「AnApprentice」が望んでいた結果を得る簡単な方法を見つけました。
まず、Deviseプラグイン内で何かをカスタマイズしたい場合は、「\ Ruby_repertory \ lib \ ruby \ gems \ 1.9.1 \ gems \ devise-version \ app \ controllers」からコードをコピーすることを強くお勧めします| helpers | mailers ... "をプロジェクトに含めるファイルに追加します。
[編集]または、「通常」のdeviseファイルからファイルを継承させることもできます...例...言う...ユーザーカスタムの最初の行であるdevise / registrations_controller.rb内の1つの関数のみを上書きしたい登録コントローラーは次のようになります。
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 %>
そして...属性ごとに1つだけエラー(最初に検出される)を表示するための小さなトリック:
<% 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
ここで大したことはありません。私が自分のビューで記述したコードを再利用して、1つのエラーpey属性のみを表示しました。これは、多くの場合、最初の属性のみが関連するためです(ユーザーが1つの必須フィールドを忘れた場合など)。
私はそれらの「ユニークな」エラーを数え、複数形を使用してH2 HTMLタイトルを作成し、それをエラーリストの前に配置しています。
これで、「devise_error_messages!」を使用できます。デフォルトのものとして、それは私が以前にレンダリングしていたものを正確にレンダリングします。
ビューで特定のエラーメッセージにアクセスする場合は、「resource.errors [:attribute] .first」などを直接使用することをお勧めします。
瀬谷、クルガー。