2017-01-09 30 views
0

サインアップページの検証が含まれていますが、登録ページを読み込んだとき エラーが表示されます。送信ボタンをクリックするとエラーが表示されるはずです 私は何をする必要がありますか?フォーム検証での問題 - Ruby on Rails

私のサインアップページ

<% if !flash[:notice].blank? %> 
    <div class="notice"> 
    <%= flash[:notice] %> 
    </div> 
<% end %> 
<%= form_for @user,validate: true do |f| %> 
<% if [email protected]? %> 
<% if @user.errors.any? %> 
    <ul class="Signup_Errors"> 
    <% for message_error in @user.errors.full_messages %> 
     <li>* <%= message_error %></li> 
    <% end %> 
    </ul> 
    <% end %> 
<% end %> 
<%= f.label("Name:") %> 
<%= f.text_field(:user_name, class: "form-control") %></br> 

<%= f.label("Email Address:") %> 
<%= f.text_field(:email_id, class: "form-control") %></br> 

<%= f.label("Password:") %> 
<%= f.password_field(:password, class: "form-control") %></br> 

<%= f.label("Confirm Password:") %> 
<%= f.password_field(:password_confirmation, class: "form-control") %></br> 

<%= f.submit("Register",class: "btn btn-primary") %> 
<a class="btn btn-primary" style="margin-left:20px" href="/login" >Login</a> 
<% end %> 

私は私の検証が含まれていた私のモデルは

User.rb

class User < ApplicationRecord 

    has_many :reviews 
    has_secure_password 

    EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i 
    validates :user_name, :presence => true, :on => :create, :uniqueness => true, :length => { :in => 3..20 } 
    validates :email_id, :presence => true, :on => :create, :uniqueness => true, :format => EMAIL_REGEX 
    validates :password, :presence => true, :on => :create, :confirmation => true #password_confirmation attr 
    validates :password_confirmation, :presence => true 
end 

コントローラ

def new 
    puts "****Inside New Method******" 
    @user = User.new 
    end 

    def create 
    puts "****Inside create Method******" 

    @user = User.new(user_params) 
    puts @user.user_name 
    if @user.save 

    puts "** USER DETAILS SAVED SUCCESSFULLY****" 
    flash[:notice] = "Registration successful, please login" 
    flash[:color] = "valid"; 
    redirect_to "/login" 
    else 
     flash[:notice] = "Invalid Form" 
     flash[:color] = "invalid" 

    end 

end 

私はロードするとページ、Erro rは送信ボタンをクリックする前に表示されます 私は以下を含みます:on =>:作成しますが動作しません

助けてください!

+0

コントローラコードを投稿できますか?クライアント側の検証宝石を使用しようとしていますか?または単にサーバー側の検証(通常/デフォルト)? – mrlew

+0

私はコントローラコードを掲示しました。クライアント側の検証ではなく、通常の検証を使用しています – Ajaykumar

答えて

0

if [email protected]?がこの原因になっている可能性があります。レコードを保存する直前に、レコードがコントローラ内で有効かどうかをチェックするだけなので、これは必要ありません。

レコードを保存できなかった場合は、render :newも追加する必要があります。そうしないと、ビューが表示されないというエラーが表示されます。

+0

空のオブジェクトのために@user.validを@user.validも削除すると、@userは@ user.errors.anyを引き起こしますか?本当です。 – Ajaykumar

+0

まだフォームを送信していない場合は、エラーはありません。 –

+0

この質問に答えることの一部ですが、このタイプのビジネスにDeviseの宝石を使うことを検討すべきです。 –

0

railsコンソールを開き、手動でユーザーを作成してください。それは創造かどうか?

例:

user = User.new(username: "test", email_id: "[email protected]", password: ...) 

user.valid! 

を使用して検証を確認し、検証が失敗した場合は、エラーメッセージが表示されます。エラーがなければ保存してください

user.save! 
+0

ページが読み込まれたときに私の懸念が表示されます。送信ボタン – Ajaykumar

+0

をクリックしている間に実際にエラーが表示されるはずですので、レールコンソールで手動でレコードを作成できますか?あなたはそれをチェックしましたか? – puneet18