3

配列をコンマ区切りのテキストとして格納するためのカスタム アクセサーを持つアクティブなレコード オブジェクトがあります。

class Thing < ActiveRecord::Base
  attr_accessible :object_list

  def objects
    self.object_list.split(",") rescue []
  end

  def objects=(input)
   self.object_list = input.join(',')
  end
end

以下を追加したいと思います

def objects<<(input)
  unless self.object_list == nil
    self.object_list << ",#{input}"
  else
    self.object_list = "#{input}"
  end
end

次のようなことができるように

thing.objects << 'this'

それは可能ですか?

4

3 に答える 3

3

私はこのようにします:

class Thing < ActiveRecord::Base
  def objects
    @objects ||= read_attribute(:objects).split(',')
  end

  def objects=(input)
    @objects=input
    write_attribute(:objects, @objects.join(','))
  end
end

これにより、オブジェクトを配列のように扱うことができますが、コンマ区切りのリストとしてデータベースに保存できます。

Rails API でのデフォルト アクセサーの上書きを参照してください。

于 2012-11-06T20:57:34.660 に答える
1

<< メソッドについてはわかりませんが、ユーザーのシリアル化はなぜですか?

http://api.rubyonrails.org/classes/ActiveModel/Serialization.html

于 2012-11-06T20:38:00.613 に答える
1

以下に概説するようにdefine_methodを使用して問題を解決できました

define_method("objects<<"){|input|
  unless self.object_list == nil
    self.object_list << ",#{input}"
  else
    self.object_list = "#{input}"
  end
}
于 2012-11-06T20:38:48.490 に答える