Ruby Rails - 使用created_at列创建表

app*_*ver 8 ruby sql timestamp ruby-on-rails

Ruby on rails具有t.timestamps方法,该方法创建两列,created_at和updated_at.如何只创建created_at列?

这有效

class CreateLinesSources < ActiveRecord::Migration
  def change
    create_table :lines_sources do |t|
      t.timestamps null: false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这两个我想工作但失败了

class CreateLinesSources < ActiveRecord::Migration
  def change
    create_table :lines_sources do |t|
      t.created_at null: false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

class CreateLinesSources < ActiveRecord::Migration
  def change
    create_table :lines_sources do |t|
      t.timestamps null: false
      remove_column updated_at
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

Aus*_*tio 6

t.datetime :created_at, null: false
Run Code Online (Sandbox Code Playgroud)

就像其他任何列一样。由于列名,Rails仍将负责魔术更新。

  • 在我看来,这个答案要好得多。因为创建“updated_at”列并在不久后将其删除有点奇怪。另外+1 用于添加时间戳的Rails 行为。 (2认同)

nay*_*iaw 6

两次尝试都没问题,但包含语法错误.

第一次尝试的问题是t.是基于数据类型而不是列名.

class CreateLinesSources < ActiveRecord::Migration
  def change
    create_table :lines_sources do |t|
      t.datetime :created_at, null: false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

第二次尝试的问题是remove_columncreate_table块内部不起作用.您可以将其移出块外,并提供正确的语法来删除列.

class CreateLinesSources < ActiveRecord::Migration
  def change
    create_table :lines_sources do |t|
      t.timestamps null: false
    end
    remove_column :line_sources, :updated_at, :datetime
  end
end
Run Code Online (Sandbox Code Playgroud)