“未定义的方法`bytesize'为nil:NilClass”出现在带有清理的表单输入之后

时间:2012-10-13 21:51:13

标签: ruby-on-rails sanitization form-for strip-tags

我在我的Rails 3应用程序中使用form_tag表示没有绑定任何模型的表单。我理解(虽然请纠正我,如果我错了)这个帮助器没有与模型绑定的form_for帮助器相同的消毒效果,所以我手动清理表单中的所有输入。

这是我的控制器(只是基础知识):

include ActionView::Helpers::TextHelper

class MyController < ApplicationController

   localVariable = params[:my_form_param].to_s

   localVariable = strip_tags(localVariable)

   localVariable = sanitize(localVariable)

end

当表单字段中包含西里尔字母,斯堪的纳维亚字符等字符时,会出现问题。将返回以下消息:

undefined method `bytesize' for nil:NilClass

我已将其缩小为strip_tagssanitize方法,但我确实需要使用它们来删除错误的输入。我已经尝试将to_s方法转移到每个方法(例如strip_tags (localVariable.to_s))但没有运气 - 我确定表单将起作用的唯一方法是完全注释掉这两行(其中,正如我所说,这是我不想做的事情。)

有人对此有任何想法吗?有没有我可以使用的替代方法,请记住我在这里没有使用模型,所以使用form_for可能会有点过火?

谢谢!

2 个答案:

答案 0 :(得分:2)

这似乎是相同的,但报告给rails here

应该使用to_str方法而不是to_s来解决,即:

localVariable = params[:my_form_param].to_str

答案 1 :(得分:0)

我想我解决了这个问题,使用了Tamer Shlash的建议,并通过黑客攻击代码。

代码的顺序似乎也很重要 - 执行strip_tags,然后执行sanitize,然后最后添加to_str方法,如下所示:

    include ActionView::Helpers::TextHelper

    class MyController < ApplicationController

       localVariable = params[:my_form_param].to_s

       localVariable = strip_tags(localVariable)

       localVariable = sanitize(localVariable)

       localVariable = localVariable.to_str

    end

不再显示错误消息。