2014-01-08 21 views
0

我遵循RailsS​​pace教程。我的錯誤表單總是顯示。它永遠在線!我不知道如何讓它消失。我知道使用@ user.errors.clear實際上會清除消息。我試圖在視圖中使用它,但不會顯示任何錯誤消息。我感謝您的幫助。如何僅在生成實際錯誤消息時才顯示錯誤消息表單

以下是錯誤格式代碼:

<% if @user.errors.any? %> 
<div id="errorExplanation"> 
    <h2>Please fix the following <%= pluralize(@user.errors.count, "error") %>:</h2> 

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

這裏是我的控制器:

class UserController < ApplicationController 

    def index 
    @title = "NubeMart Hub!" 
    end 

    def register 
    @user = User.new 
    @title = "Register" 
    if request.post? 

     @user = User.create(ad_params) 
    end 

     if @user.save 

     flash[:notice]="User #{@user.screen_name} created!" 
     redirect_to :action=>"index" 
     end 

    end 

    def ad_params 
    params.require(:user).permit(:screen_name, :email, :password) 
    end 

end 

這是我的觀點:

<h2>Register</h2> 

<%= form_for :user do |form| %> 

    <%= render "shared/form_errors", :user => @user %> 
    <fieldset> 
    <legend>Enter Your Details</legend> 

    <div class="form_row"> 
     <label for="screen_name">Screen name:</label> 
     <%= form.text_field :screen_name, 
          :size => User::SCREEN_NAME_SIZE, 
          :maxlength => User::SCREEN_NAME_MAX_LENGTH %> 
    </div> 

    <div class="form_row"> 
     <label for="email">Email:</label> 
     <%= form.text_field :email, 
          :size => User::EMAIL_SIZE, 
          :maxlength => User::EMAIL_MAX_LENGTH %> 
    </div> 

    <div class="form_row"> 
     <label for="password">Password:</label> 
     <%= form.password_field :password, 
           :size => User::PASSWORD_SIZE, 
           :maxlength => User::PASSWORD_MAX_LENGTH %> 
    </div> 

    <div class="form_row"> 
     <%= submit_tag "Register!", :class => "submit" %> 
    </div> 
    </fieldset> 

<% end %> 

回答

0

你的註冊方法是錯誤的:

def register 
    @user = User.new 
    @title = "Register" 
    if request.post? 
    @user = User.create(ad_params) 
    end 
    if @user.save # <== This block should be moved! 
    flash[:notice]="User #{@user.screen_name} created!" 
    redirect_to :action=>"index" 
    end 
end 

即使請求未發佈,此代碼if @user.save也會執行。如果塊if request.post?以外,您已經將此代碼放在了外面。

我認爲下面的代碼應該可以解決您的問題。

def register 
    @title = "Register" 
    if request.post? 
    @user = User.new(ad_params) # I have changed create to new 
    if @user.save    # here your user will be saved(inly in case of post request) 
     flash[:notice]="User #{@user.screen_name} created!" 
    end 
    else 
    @user = User.new # (this is when request is not post) 
    end 
    redirect_to :action=>"index" 
end 
+0

它的工作原理!謝謝你指出我的錯誤。 – salvador69g