0

form_tag在我的 Rails 3 应用程序中使用了一个未绑定到任何模型的表单。我了解(尽管如果我错了请纠正我)这个助手没有与模型绑定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_tagsandsanitize方法,但我确实需要使用它们来删除错误的输入。我已经尝试将 to_s 方法也转移到每个方法(例如strip_tags (localVariable.to_s)),但没有运气 - 我确定表单将起作用的唯一方法是完全注释掉这两行(正如我所说,这是我不想做的事情)。

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

谢谢!

4

2 回答 2

2

这似乎是相同的,但这是在这里向 rails 报告的。

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

localVariable = params[:my_form_param].to_str
于 2012-11-21T17:39:00.993 回答
0

我想我解决了这个问题,使用了 Tamer Shlash 的建议并稍微修改了代码。

代码的顺序似乎也很重要——先做 a strip_tags,然后 a 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

错误消息不再出现。

于 2012-11-22T09:34:53.760 回答