我有一个新动作,显示包含大多数用户模型属性的表单,但有些复选框(学校和角色通过连接表)除外。如果某些状态验证失败,我将重定向回具有预填充值的新操作。除了用户模型没有那些额外的复选框参数,它只是保持为空。如果由于状态验证为假而重定向用户,我需要能够预先填充这些值。似乎重定向发生而不是渲染,因此在错误发生之前,我无法访问用户检查值的params[:school_id]
或params[:role_id]
数组。解决这个问题的最快捷方法是暂时将值存储在会话中,然后在重定向时删除它们。虽然看似错误。有没有正确的方法来做到这一点?
用户模型
class User < ActiveRecord::Base
# These validate filters cause the create code to never run if the presence is false.
# Because of this I cannot persist the parameters passed into params[:school_id] and params[:role_id]
validates :fName, presence: true
validates :lName, presence: true
validates :title, presence: true
validates :phone, presence: true
# ...
用户控制器
# Registration
def new
@user = User.new()
end
# Register
def create
@user = User.new(user_params)
if @user.save()
join_school_and_users(@user) # Joins the school with user using params[:school_id]
join_roles_and_users(@user) # joins the role with the user using params[:role_id]
redirect_to users_path, notice: 'User successfully added.'
else
render action: 'new', notice: 'Failed to create your user.'
end
end