我有一个简单的“Log”模型,它记录调用控制器动作的事实。
此“日志”记录的条目应该创建一次,并且永远不会更改。此外,我将在数据库中包含许多这些记录。
因此,不需要“updated_at”列(不需要浪费硬盘上的内存)。
如何告诉Rails只留下“created_at”列而不使用“updated_at”?
有没有办法让“Log”模型只读?
答案 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不会更新那些不存在的内容。