Ruby on rails “关闭”;更新的“U at”;钢轨立柱

Ruby on rails “关闭”;更新的“U at”;钢轨立柱,ruby-on-rails,database,model,Ruby On Rails,Database,Model,我有一个简单的“日志”模型,它记录了调用控制器操作的事实 这个“日志”记录的条目应该创建一次,并且永远不会更改。此外,我将在数据库中有许多这样的记录 因此,不需要“updated_at”列(不需要在硬盘上浪费内存) 我如何告诉Rails只保留“created_at”列而不使用“updated_at” 有没有办法使“Log”模型成为只读的?我想您在列中更新了,因为您在模型的迁移文件中使用了t.timestamps速记。如果不需要该列,则可以明确指定所需内容: class Log < Acti

我有一个简单的“日志”模型,它记录了调用控制器操作的事实

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

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

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


有没有办法使“Log”模型成为只读的?

我想您在列中更新了
,因为您在模型的迁移文件中使用了
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
类日志
通过向模型添加
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
类日志
上面的例子是从中采用的


如果不需要在
列中更新
,只需将其从数据库中删除(或不添加)。Rails不会更新没有的内容。

很酷,谢谢。还有一件事-我如何防止破坏记录?这个“只读”的技巧不适用于这个…约翰,这是一个经过验证的解决方案?你用过吗?很好的解决方案。Rails足够聪明,知道在列存在时更新创建的_。