2015-11-21 45 views
0

我有一個user_controller更新方法。根據用戶來自何處,我有時必須向用戶傳遞一個額外的param(:tournament)編輯表單,它實際上不會更新用戶實例,但可以幫助我在用戶結束時將用戶重定向到正確的頁面更新操作。如何從instance_params中更新沒有參數的實例?

這裏是我的更新方法:

def update 
    authorize @user 
    if @user.subscriptions.exists? && [email protected]? && user_params[:birthdate].present? 
     flash[:alert] = "Vous ne pouvez plus modifier votre date de naissance après vous etre inscrit à une compétition. Merci de contacter l'administrateur du site" 
     redirect_to user_path(current_user) 
    elsif @user.update(user_params) 
     if @user.judge? && @user.profile_complete? && [email protected] 
     UserMailer.judge_waiting_for_confirmation(@user).deliver 
     redirect_to user_path(current_user) 
     else 
     redirect_to user_path(current_user) 
     end 
    else 
     render 'edit' 
    end 
    end 

問題是在ELSIF當我嘗試更新我的user_params用戶,它會引發我一個錯誤unknown attribute 'tournament' for User.

我的用戶PARAMS看起來像這樣:

def user_params 
    params.require(:user).permit(
     :extradoc, 
     :address, 
     :birthdate, 
     :certifmedpicture, 
     :club, 
     :email, 
     :first_name, 
     :genre, 
     :judge_number, 
     :last_name, 
     :licence_number, 
     :licencepicture, 
     :login_aei, 
     :name, 
     :password_aei, 
     :picture, 
     :ranking, 
     :telephone, 
     :sms_forfait, 
     :sms_quantity, 
     :tournament 
    ) 
    end 

我該如何更新我的用戶而不用:錦標賽參數,同時允許我使用它將我的用戶重定向到正確的位置在行動結束時?

回答

3

您需要爲tournament屬性創建attr_accessor來實現此目的。

所以進入你的用戶模型,並創建attr_accessortournament象下面這樣:

attr_accessor :tournament 

現在你可以在你的表格設置的比賽價值。從user_params刪除tournament

您可以通過params[:user][:tournament]檢查並重定向。你的對象也會正確更新。

+0

當我刪除:比賽從user_params我仍然發現不允許的參數:錦標賽 –

+0

@DavidGeismar不會從你的params中刪除它也是一個選項。你仍然可以將attr_accessor放在你的用戶模型上,所以你的用戶實例知道這個屬性。 –