如何在rails中存在验证失败后暂时保留额外的表单参数

时间:2014-02-21 16:50:06

标签: ruby-on-rails-4

我有一个新动作,显示包含大多数用户模型属性的表单,但有些复选框(学校和角色通过连接表)除外。如果某些状态验证失败,我将重定向回具有预填充值的新操作。除了用户模型没有那些额外的复选框参数,它只是保持为空。如果由于状态验证为假而重定向用户,我需要能够预先填充这些值。似乎重定向发生而不是渲染,因此在错误发生之前,我无法访问用户检查值的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

0 个答案:

没有答案