22904


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

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

[code]

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

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


CC BY-SA 3.0
2016-03-07T06:25:26.757
22879
2016-03-08T00:21:23.983
8919
question
ruby-on-rails
モデルのメソッドでのself.saveについて


質問の背景が上手く読み取れないのですが、別のLogクラスを用意するのではダメなのでしょうか？

[code]

    class MyData
      def log_save(msg)
        MyDateLog.create(my_data: self, msg: msg)
      end
    end
    
    class MyDataLog
      has_one :my_data
    end
    
[/code]


CC BY-SA 3.0
2016-03-07T12:12:50.820
22888
2016-03-07T12:12:50.820
7471
22879
answer


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

そんなことはないです。`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]


CC BY-SA 3.0
2016-03-08T00:21:23.983
22904
2016-03-08T00:21:23.983
5793
22879
answer