在我的控制器中我有:
def edit
@konkurrencer = Konkurrencer.find(params[:id])
@konkurrencer.attributes.map{|d| d.map{|d| d.dup.force_encoding("UTF-8") } }
end
我想删除@konkurrencer的created_at和updated_at属性,因为我无法以时间格式调用force_encoding。
答案 0 :(得分:2)
您可能希望这样做而不是删除这些属性:
@konkurrencer.attributes.map{|d| d.map{|d| d.dup.force_encoding("UTF-8") if d.respond_to?(:force_encoding) }
这也将跳过您没有响应force_encoding的任何其他属性。然而,这导致了大量的nils,所以我认为你正在做的事情不在这里......
答案 1 :(得分:1)
您可以测试属性的类型,并仅在它是String时调用force_encoding。 尝试更改类似
的细分d.dup.force_encoding("UTF-8")
与
(d.is_a? String) ? d.dup.force_encoding('UTF-8') : d.dup
答案 2 :(得分:1)
@konkurrencer.attributes.except(:created_at, :updated_at).map{|d| d.map{|d| d.dup.force_encoding("UTF-8") } }