模型自定义验证即使不是,也会传递true

时间:2014-06-26 00:12:07

标签: ruby-on-rails forms validation ruby-on-rails-4

我对此非常困惑。我的模型有以下自定义验证:

def custom_validation
    errors[:base] << "Please select at least one item" if @transactionparams.blank?
end

基本上它正在检查以确保属于不同模型的某些参数不是空白的。

def request_params
    @requestparams = params.require(:request).permit(:detail, :startdate, :enddate) 
    @transactionparams = params["transaction"]
    @transactionparams = @transactionparams.first.reject { |k, v| (v == "0") || (v == "")}
end

如果它不是空白,那么会发生的是保存记录,然后发生各种其他事情。

def create
    request_params
    @request = @user.requests.create(@requestparams)
    if @request.save
        ...
    else
        render 'new'
    end
end

如果未保存记录,则重新呈现的new视图将显示阻止创建@request的错误。问题是无论@transactionparams.blank?是真还是假,记录总是无法保存,我在日志中用puts专门检查了这一点。

发生了什么事?我仔细阅读了文档,因为我认为自定义验证器可能无法用于其他变量......但事实并非如此......

谢谢!

1 个答案:

答案 0 :(得分:0)

确实可以阅读相关文章。从模型中的控制器访问变量是不好的做法。这就是为什么......如果我将puts检查放在模型而不是控制器中,@transactionparams总是为零。