我在我的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_tags
和sanitize
方法,但我确实需要使用它们来删除错误的输入。我已经尝试将to_s方法转移到每个方法(例如strip_tags (localVariable.to_s)
)但没有运气 - 我确定表单将起作用的唯一方法是完全注释掉这两行(其中,正如我所说,这是我不想做的事情。)
有人对此有任何想法吗?有没有我可以使用的替代方法,请记住我在这里没有使用模型,所以使用form_for
可能会有点过火?
谢谢!
答案 0 :(得分:2)
答案 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
不再显示错误消息。