2015-05-21 30 views
1

我有一個users_controller並具有三個步驟user_steps_controller:業務:支付:登錄如何使用惡人進行驗證?

在user.rb模型

class User < ActiveRecord::Base 
validates_presence_of :fname, :lname, :email, :mob, :country, :state, :suburb, :postal ,:add 
end 

同時檢查確認,如果我把一些隨機值,那麼它也是給錯誤

Fname can't be blank 
Lname can't be blank 
Email can't be blank 
Mob can't be blank 
Country can't be blank 
State can't be blank 
Suburb can't be blank 
Postal can't be blank 
Add can't be blank 

請幫我

這是我users_controller

def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:id]) 
    if @user.save 
     session[:user_id]= @user.id 
     @user.update_attributes(user_params) 
     redirect_to user_steps_path 
    else 
     render :new 
    end 
    end 

    private 
    def user_params 
    params.require(:user).permit(:fname, :lname, :email, :mob, :gender_male, :gender_female, :country, :state, :suburb, :postal ,:add, :cmpyname, :abnacn, :cmpyadd, :cmpydet,:cash, :paypal,:bsb,:usrname,:password_hash, :password_salt, :selcat, :protit, :prodes) 
    end 

user.rb

類用戶<的ActiveRecord :: Base的

validates :fname, :lname, :email, :mob, :country, :state, :suburb, :postal ,:add, :presence => true 

attr_accessor :current_step 

validates_presence_of :cmpyname, :abnacn, :cmpyadd, :cmpydet, if: -> { current_step?(:business) } 
validates_presence_of :usrname,:password_hash, :password_salt, :selcat, :protit, :prodes, if: -> { current_step?(:login) } 

def current_step?(step_key) 
    current_step == step_key 
end 

end 

user_steps_controller

class UserStepsController < ApplicationController 
    include Wicked::Wizard 
    steps :business, :login, :payment 

def show 
    @user = current_user 
    render_wizard 
end 

    def update 

    @user = current_user 
    params[:user][:current_step] = step 
    @user.update_attributes(user_params) 
    render_wizard @user 

    end 

private 
    def user_params 
    params.require(:user).permit(:cmpyname, :abnacn, :cmpyadd, :cmpydet,:cash, :paypal,:bsb,:usrname,:password_hash, :password_salt, :selcat, :protit, :prodes) 
    end 
end 
+0

您可能需要在您用來測試驗證的一些表單代碼中發佈信息。 – snkashis

+0

請發佈您的控制器代碼,觸發用戶創建 –

+0

我發佈users_controller @Stanislav –

回答

1

你真正的問題是在這裏:

@user = User.new(params[:id]) 

我假設params[:id]nil,因爲否則就會失敗。基本上,你實例化User沒有提供數據並試圖保存它。很明顯,你提供的驗證將會失敗。如果你實際上提交與用戶數據的表格,你需要通過user_params您已經定義如下:

@user = User.new(user_params)

如果您需要進行驗證,以有你在不同的步驟用戶模型,你就需要有驗證運行有條件地依賴於表單的狀態:

class User 
    attr_accessor :current_step 
    validates_presence_of :business_related_attr, if: -> { current_step?(:business) } 

    def current_step?(step_key) 

    current_step.blank? || current_step == step_key 
    end 
end 
+0

謝謝@faraz .. –

+0

但現在下一步驗證錯誤即將到來,如果我在第一頁上,沒有去下一步...請幫助我出於這個@faraz –

+0

我不幸需要現在睡覺。用細節發佈另一個問題,並希望其他人可以提供幫助! – fny

2

user.rb

def current_step?(step_key) 
    current_step == step_key 
end 

使用r_steps_controller.rb

class UserStepsController < ApplicationController 
    include Wicked::Wizard 
    steps :personal, :social 

    def show 
    @user = current_user 
    render_wizard 
    end 

    def update 
    @user = current_user 
    params[:user][:current_step] = step 
    @user.attributes = user_params 
    render_wizard @user 
    end 

private 

    def redirect_to_finish_wizard(options = nil) 
    redirect_to root_url, notice: "Thank you for signing up." 
    end 

    def user_params 
    params.require(:user).permit(:name, :current_step, :date_of_birth, :bio, :twitter_username, :github_username, :website) 
    end 
end 

此方法適用於您。

+0

現在第一頁正常工作,但它不顯示在其他步驟驗證@ user123 –

+0

粘貼你正在寫的user.rb的代碼 –

+0

添加user.rb @ user123 –