我有一个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
方法?
答案 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局部化来清理命名空间。我不知道该怎么做,但如果有人想编辑这个答案并做到这一点,请随意这样做。