1

ホーム画面にサインアップフォームがあります。ユーザーが無効なデータを入力すると、/signinページにリダイレクトされます。このページでは、入力されたフィールドが表示されますが、エラーの説明は空です。

これが私のものUsersControllerです:

class UsersController < ApplicationController
  def new
    @user = User.new(params[:user])
  end

  def create
    @user = User.new(params[:user])
    print @user
    if  @user.save

    else
      render 'new'
    end
  end
end

エラーを表示するために使用する方法

module ApplicationHelper

  def errors_for(model, attribute)
    if model.errors[attribute].present?
      content_tag :div, :class => 'well error' do
        content_tag :ul do
          model.errors[attribute].collect {|item| concat(content_tag(:li, item))}

        end
      end
    end
  end
end

私のフォームの部分:

<%= f.label :user_name %>
<%= f.text_field :user_name, :class=>"input-medium" %>
<%= errors_for(@user, :user_name) %>

<%= f.label :email %>

<%= f.text_field :email, :class=>"input-medium " %>

<%= errors_for(@user, :email) %>

<%= f.label :password %>

<%= f.password_field :password, :class=>"input-medium" %>

<%= f.label :password_confirmation, "Confirmation" %>

<%= f.password_field :password_confirmation, :class=>"input-medium" %>

そして私のサインアップビュー:

<section class="centered user-form-container">
  <div class="user-form well pull-left">
    <div class="centered">
      <h1>Sign up</h1>
      <%= form_for(@user, :action=>"create") do |f| %>
          <%= render 'signup', :f=>f %>
          <%= f.submit "Sign up" %>

      <% end %>
    </div>
  </div>

</section>
4

3 に答える 3

1

この状況ではflash.now、次のようなものを使用する必要があると思います。

レールドキュメントごと:

デフォルトでは、フラッシュに値を追加すると、次のリクエストで使用できるようになりますが、同じリクエストでそれらの値にアクセスしたい場合があります。たとえば、作成アクションがリソースの保存に失敗し、新しいテンプレートを直接レンダリングした場合、新しいリクエストは発生しませんが、フラッシュを使用してメッセージを表示したい場合があります。これを行うには、通常のフラッシュを使用するのと同じ方法で flash.now を使用できます。

def create
  @user = User.new(params[:user])
  print @user
  if  @user.save

  else
    # start with this, then expand the error text
    flash.now[:error] = "Could not save user"
    render 'new'
  end

end
于 2012-05-14T13:20:43.520 に答える
1

検証メソッドでこれを行います。

標準の Rails 検証を使用している場合は、次のようにします。

validates_presence_of :foo, :message => 'Message you want to display here'

カスタム検証を行っている場合は、次のようになります。

def my_validation_method
  begin
    my_validation_code_here
  rescue
    self.errors[:base] << 'Message you want to display here'
  end
end
于 2012-05-14T14:31:09.757 に答える
1
  def new
    @user = User.new(params[:user])
    if (!params[:user].nil?)
      @user.valid?
    end


  end
于 2012-05-15T11:01:27.750 に答える