0

ビューページのマイコード(views/session/new.html.erb):

< %= form_for(:session, :url => sessions_path) do |f| %>

          <%= f.label :email, 'Username'%>
          <%= f.text_field :email %>

          <%= f.label :password %>
          <%= f.password_field :password %>

          <%= f.submit  'Login'%>
          <%= link_to 'Forgot Your Password?', new_password_reset_path >
< % end %>

モデルファイルに適切な検証コードを書きました。しかし、送信時に、検証エラーがページの上部ではなくフィールドに隣接してポップアップする必要があります。

前もって感謝します !

4

3 に答える 3

1

Rails に組み込まれているサーバー側の検証を使用する場合は、検証エラーが存在するかどうかを確認し、存在する場合はそれらを出力できます。

<%= form_for(:session, :url => sessions_path) do |f| %>

  <%= f.label :email, 'Username'%>
  <%= f.text_field :email %>
  <% if f.object.errors[:email] %>
    <%= f.object.errors[:email].join(", ") %>
  <% end %>

  <%= f.label :password %>
  <%= f.password_field :password %>
  <% if f.object.errors[:password] %>
    <%= f.object.errors[:password].join(", ") %>
  <% end %>

  <%= f.submit 'Login'%>
  <%= link_to 'Forgot Your Password?', new_password_reset_path >

<% end %>

いくつかのことに注意してください。

まず、フォーム内のオブジェクトではなくシンボルを渡すため、を呼び出してブロック内からオブジェクトの属性にアクセスする必要があります。form_forf.object

次に、フィールドによっては複数の検証エラーが発生する可能性があるため、それらを順番に出力する必要があります。Ruby のjoin方法を使用すると、これらを一貫した方法で連結するのに役立ちます。

更新

エラーを対応するテキスト フィールドの横に直接表示する場合は、CSS を適用する必要があります。明らかに、これにはスタイルシートを使用することをお勧めしますが、簡単にするために、インライン スタイルを使用してこれをレンダリングする方法の例を次に示します。

<%= f.text_field :email, :address, :style => "display: inline-block; float: left;" %>
<% if f.object.errors[:email] %>
  <span style="display: inline-block; float: left;">
    <%= f.object.errors[:email].join(", ") %>
  </span>
<% end %>
<div style="clear: left;"></div>
于 2013-09-09T21:55:42.453 に答える
1

私は次のようなもので行きます:

<%= form_for(:session, :url => sessions_path) do |f| %>
  <%= f.label :email, 'Username' %>
  <%= f.text_field :email %>
  <%= f.object.errors[:email].to_sentence if f.object.errors[:email] %>
<% end %>

残りはお分かりになると思います。

于 2013-09-09T21:57:58.240 に答える