Rails从实例变量中删除属性

时间:2012-02-23 23:16:57

标签: ruby-on-rails ruby ruby-on-rails-3

在我的控制器中我有:

  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。

3 个答案:

答案 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") } }