Rails:解码text_field值

时间:2013-06-11 19:53:21

标签: ruby-on-rails ruby actionview

我有一个rails应用程序,我使用观察者编码所有模型数据。我用html代码编码。例如,Börje's idé变为Börje's idé

我现在的问题是每当我创建一个表单进行编辑时。

<%= form_for(resource) do |f| %>
    <%= f.label :name, "Name" %>
    <%= f.text_field :name %>
<% end %>

有没有办法强制text_field方法进行一些解析(即通过我的d()方法运行它。)

我想要一个解决方案,我不必修改每个模型和每个表单。也许可以覆盖ActionView::Helpers::FormBuilder.text_field方法?

1 个答案:

答案 0 :(得分:0)

这是我找到的一个解决方案:

# controllers/application_controller.rb
module ActionView
    module Helpers
        class FormBuilder
            alias_method :old_text_field, :text_field

            def d(str)
                return str unless str.is_a? String

                next_str = HTMLEntities.new.decode(str)
                while (next_str != str)
                    str = next_str
                    next_str = HTMLEntities.new.decode(str)
                end
                return next_str
            end

            def text_field(method, options = {})
                @object[method] = d(@object[method])
                return old_text_field(method, options)
            end
        end
    end
end

我想使用instance_method并在覆盖方法中绑定它会通过在范围内使old_text_field局部化来清理命名空间。我不知道该怎么做,但如果有人想编辑这个答案并做到这一点,请随意这样做。