如何在没有 instance_params 中的参数之一的情况下更新实例?
How to update an instance without one of the params from the instance_params?
我有一个带有更新方法的 user_controller。根据用户的来源,我有时不得不为用户传递一个额外的参数(:tournament),它实际上不会更新用户实例,但可以帮助我在结束时将用户重定向到正确的页面更新操作。
这是我的更新方法:
def update
authorize @user
if @user.subscriptions.exists? && !@user.judge? && 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? && !@user.accepted
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
当我尝试使用 user_params 更新我的用户时,问题出在 elsif 中,它抛出一个错误 unknown attribute 'tournament' for User.
我的用户参数看起来像这样:
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
如何在不使用 :tournament 参数的情况下更新我的用户,同时允许它,以便我可以使用它在操作结束时将我的用户重定向到正确的位置?
您需要为 tournament
属性创建 attr_accessor
才能实现此目的。
因此进入您的用户模型并为 tournament
创建 attr_accessor
,如下所示:
attr_accessor :tournament
现在您可以在表单中设置锦标赛价值。从 user_params
.
中删除 tournament
您可以在 params[:user][:tournament]
检查和重定向中获取价值。您的对象也会正确更新。
我有一个带有更新方法的 user_controller。根据用户的来源,我有时不得不为用户传递一个额外的参数(:tournament),它实际上不会更新用户实例,但可以帮助我在结束时将用户重定向到正确的页面更新操作。
这是我的更新方法:
def update
authorize @user
if @user.subscriptions.exists? && !@user.judge? && 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? && !@user.accepted
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
当我尝试使用 user_params 更新我的用户时,问题出在 elsif 中,它抛出一个错误 unknown attribute 'tournament' for User.
我的用户参数看起来像这样:
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
如何在不使用 :tournament 参数的情况下更新我的用户,同时允许它,以便我可以使用它在操作结束时将我的用户重定向到正确的位置?
您需要为 tournament
属性创建 attr_accessor
才能实现此目的。
因此进入您的用户模型并为 tournament
创建 attr_accessor
,如下所示:
attr_accessor :tournament
现在您可以在表单中设置锦标赛价值。从 user_params
.
tournament
您可以在 params[:user][:tournament]
检查和重定向中获取价值。您的对象也会正确更新。