关闭Rails中的"updated_at"列

Ant*_*nAL 23 database model ruby-on-rails

我有一个简单的"Log"模型,它记录调用控制器动作的事实.

这个"日志"记录的条目应该被创建一次并且从不改变.此外,我将在数据库中有许多这些记录.

因此,不需要"updated_at"列(不需要在HDD上浪费内存).

如何告诉Rails只留下"created_at"列而不使用"updated_at"?

有没有办法让"Log"模型只读?

Joh*_*ley 34

我认为你有updated_at列,因为你t.timestamps在模型的迁移文件中使用了速记.如果您不想要该列,则可以明确指定您想要的内容:

class Log < ActiveRecord::Migration
  def self.up 
    create_table :logs do |t|
      t.column  :foo,        :string
      t.column :created_at, :datetime
    end
  end

  def self.down 
    drop_table :logs
  end
end
Run Code Online (Sandbox Code Playgroud)


Dan*_*son 18

您可以通过向模型添加readonly?方法来使模型只读.

class Log < ActiveRecord::Base
    # Prevent modification of existing records
    def readonly?
       !new_record?
    end

    # Prevent objects from being destroyed
    def before_destroy
      raise ActiveRecord::ReadOnlyRecord
    end

end
Run Code Online (Sandbox Code Playgroud)

上面的例子是从这里采用的.

如果您不需要该updated_at列,只需从数据库中删除(或不添加)它.Rails不会更新那里没有的东西.