1

Rails 3.2.2 を使用していますが、検証が失敗したときに field_with_errors div を取得していません。

ビュー/セッション/new.html.erb

<%= form_tag sessions_path do %>

  <p><%= label_tag :email %><br />
  <%= email_field_tag :email %></p>

  <p><%= label_tag :password %><br />
  <%= password_field_tag :password %></p>

  <p><%= submit_tag "Log in" %></p>

<% end %>

コントローラー/sessions_controller.rb

  def create
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password]) && user.account.subdomain == request.subdomain
      session[:user_id] = user.id
      redirect_to home_path
      flash[:notice] = "Logged in!"
    else
      flash.now[:error] = "Invalid email or password"
      render 'new'
    end
  end

models/user.rb

  attr_accessible :first_name, :last_name, :email, :password, :password_confirmation
  has_secure_password

  validates :email, :presence => true, :uniqueness => true
  validates :password, :presence => true, :on => :create

フラッシュ メッセージが表示されますが、検証が失敗した場合、ビューは field_with_errors ラッパー div をレンダリングしません。何か案は?

ありがとう。

4

2 に答える 2

2

デフォルトでは含まれなくなりました。独自のエラー メッセージを表示する必要があります。

Postモデルの足場で生成されたサンプル コードを次に示します。

<% if @post.errors.any? %>
  <div id="error_explanation">
    <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>

    <ul>
      <% @post.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
    </ul>
  </div>
<% end %>

その後、それを部分的に抽出して、他のモデルで再利用できます。

于 2012-04-06T01:38:51.220 に答える