2012-04-06 3 views
1

레일즈 3.2.2를 사용 중이며 유효성 검사가 실패 할 때 field_with_errors div가 표시되지 않습니다.어떤 이유에서 field_with_errors가 나타나지 않습니다.

보기/세션/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 

모델/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가 렌더링되지 않습니다. 어떤 아이디어?

감사합니다.

답변

2

더 이상 기본적으로 포함되지 않으므로 직접 오류 메시지를 렌더링해야합니다.

<% 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 %> 

당신은 다음 다른 모델에 다시 사용하기 위해 부분적으로 그것을 추출 할 수 있습니다 :

는 여기 Post 모델 발판에서 발생하는 몇 가지 예제 코드입니다.

+0

흠. .. 그래서 내 로컬 사용자 대신 @user를 사용하도록 sessions_controller를 설정했지만 유효하지 않은 양식을 제출할 때'undefined method 'errors for'nil : NilClass'을 입력했습니다. – Nathan

+0

모델 오류 메시지에 대해 묻는 것으로 가정했습니다. 일반. 어쨌든 인증 메소드가 사용자 또는 nil을 반환하기 때문에'user' 인스턴스는 에러를 가지지 않습니다. 그래서 로그인 양식의 플래시 메시지로 충분합니다. 성공적으로 로그인했거나 로그인하지 않았습니다. – James

+0

아, 그래. 감사! – Nathan

1

field_with_errors 기능은 form_for과 작동합니다. 당신이 그것을 원하는 경우에 오류를 추가 할 authenticate 방법을 변경할 수 있습니다하여 @user 객체 (작동이에 대한 인스턴스 변수해야 할 것이다), 다음에 양식을 변경

<%= form_for(@user) do |f| %> 

    <%= f.error_messages %> 

    <p><%= f.label :email %><br /> 
    <%= f.email_field :email %></p> 

    <p><%= f.label :password %><br /> 
    <%= f.password_field :password %></p> 

    <p><%= f.submit "Log in" %></p> 

<% end %> 
관련 문제