モデルのメソッドでのself.saveについて


ログ関連のDBに保存するためにActive Recordのモデルでデータの保存をできないかと考えています。

以下のようなものを考えているのですが、クラスメソッドで新規のモデルを作成するのも変なようですし、インスタンスメソッドでも「self.save」のような動作ができないので自身のモデルの中で新規作成ができないか質問させていただきました。

[code]

    def log_save(msg)
      self.msg = msg
      self.save
    end
    
[/code]

そもそもの考え方的に自身のモデルの中で保存しないものなのでしょうか？




> クラスメソッドで新規のモデルを作成するのも変なよう

そんなことはないです。`Model.create`はクラスメソッドです。

例えばJSON文字列を元にレコードを作りたいのであれば以下のようなメソッドを定義する方法が考えられます。

[code]

    class Log < ActiveRecord::Base
      def self.create_from_json(json)
        param = JSON.parse(json)
        # その他 param をごにょごにょする
        self.create(param)
      end
    end
    
[/code]




> クラスメソッドで新規のモデルを作成するのも変なよう

そんなことはないです。`Model.create`はクラスメソッドです。

例えばJSON文字列を元にレコードを作りたいのであれば以下のようなメソッドを定義する方法が考えられます。

[code]

    class Log < ActiveRecord::Base
      def self.create_from_json(json)
        param = JSON.parse(json)
        # その他 param をごにょごにょする
        self.create(param)
      end
    end
    
[/code]

