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
这两个我想工作但失败
class CreateLinesSources < ActiveRecord::Migration
def change
create_table :lines_sources do |t|
t.created_at null: false
end
end
end
和
class CreateLinesSources < ActiveRecord::Migration
def change
create_table :lines_sources do |t|
t.timestamps null: false
remove_column updated_at
end
end
end
答案 0 :(得分:6)
两次尝试都没问题,但包含语法错误。
第一次尝试的问题是t。是基于数据类型而不是列名。
class CreateLinesSources < ActiveRecord::Migration
def change
create_table :lines_sources do |t|
t.datetime :created_at, null: false
end
end
end
第二次尝试的问题是remove_column
在create_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
答案 1 :(得分:4)
t.datetime :created_at, null: false
就像任何其他专栏一样。由于列名,Rails仍然会处理魔术更新。
答案 2 :(得分:1)
你可以这样做:
def change
create_table :lines_sources do |t|
t.datetime :created_at, null: false
end
end