关闭Rails中的“updated_at”列

时间:2010-07-27 10:47:46

标签: ruby-on-rails database model

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

此“日志”记录的条目应该创建一次,并且永远不会更改。此外,我将在数据库中包含许多这些记录。

因此,不需要“updated_at”列(不需要浪费硬盘上的内存)。

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

有没有办法让“Log”模型只读?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

以上示例来自here

如果您不需要updated_at列,只需从数据库中删除(或不添加)它。 Rails不会更新那些不存在的内容。