【问题标题】:Rails: decode text_field valueRails:解码 text_field 值
【发布时间】:2013-06-11 19:53:21
【问题描述】:

我有一个 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 方法?

【问题讨论】:

  • 您的意思是用您解析/解码的数据填充 text_field?

标签: ruby-on-rails ruby actionview


【解决方案1】:

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

# 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 在范围内成​​为本地来稍微清理命名空间。我不知道该怎么做,但如果有人想编辑这个答案并这样做,请随时这样做。

【讨论】:

  • 这将起作用,但将为 every text_field 实现此行为。你确定这是你想要的吗?
  • 是的,这正是我想要的。正如我所说,我有一个全局观察者,它为每个模型编码每个文本输入(来自用户)。所以我也需要解码每个字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多