簡體   English   中英

Rails:解碼text_field值

[英]Rails: decode text_field value

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

這是我發現的一種解決方案:

# 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局部化來清理命名空間。 我不確定如何執行此操作,但是如果有人要編輯此答案並執行此操作,請隨時執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM