9

Rails 3.1で検証エラーに失敗したフィールドのフォームフィールドの強調表示をどのように表示しますか?スキャフォールディングはこれを処理するためにcssとコントローラーコードを自動的に生成することを知っていますが、それを手動で生成する方法があるかどうか疑問に思いました。@ user.errors.full_messages.each ... etcを介してエラーメッセージの文字列表示をすでに実装しましたが、フィールドを赤で強調表示することができません。何か案は?

ありがとう。

4

3 に答える 3

23

CSSファイルのフィールドにエラークラスがあると仮定します。

<% if @user.errors[:name] %>
  <%= f.label :name, :class => "error" %>
<% else %>
  <%= f.label :name %>
<% end %>

これは、あなたの望むことですか?

追加デフォルトのActiveRecord検証CSSのカスタマイズに関するセクションがあります。

編集:( 追加のifについて)

# app/helpers/application_helper.rb

def field_class(resource, field_name)
  if resource.errors[field_name]
    return "error".html_safe
  else
    return "".html_safe
  end
end

その後:

# in your view

<%= f.label :name, :class => field_class(@user, :name) %>
<%= f.label :password, :class => field_class(@user, :password) %>
[...]

(私はそこで間違いを犯したかもしれません-私は電話で書いています-しかしあなたは一般的な考えを理解します。これは多くの方法でコーディングできます=無限大なのであなたが好きなようにそれをしてください...)

于 2012-08-31T21:22:13.287 に答える
8

レールは今やその袖に素晴らしいトリックを持っています..error発生したとき、レールはエラーフィールドの周りにdivクラスを配置します。.field_with_errorsこれで、そのクラスをターゲットにしてスタイルを追加できます。

入力に集中するには、次のことができます

.field_with_errors input{
  border: 1px solid red !important;
}

このcssは、既存のスタイルを上書きinputしながら、要素の周りに素敵な赤い線を配置します。important!

于 2017-02-25T12:31:23.747 に答える
0

私はそれを機能させるためにこれをしなければなりませんでした(resource.errors [field_name] .length> 0):

def field_class(resource、field_name)if resource.errors [field_name] .length> 0 return "custom_error1" .html_safe else return "" .html_safe end end

于 2013-06-01T04:53:35.533 に答える