抱歉,如果之前已经回答过这个问题,但我找不到明确的答案。
当然有人在使用时遇到过这个问题,upsert您需要指定包括created_at和在内的每一列updated_at?
created_at当更新插入发生时如何不更新时间戳?我只想插入created_at一次。
a = User.upsert({
name: ....,
age: ....
created_at: DateTime.now,
updated_at: DateTime.now
}, unique_by: :upsert_user_index )
Run Code Online (Sandbox Code Playgroud) 我有一些属性需要有默认值。我已经设置了迁移以在数据库中设置默认值,如下所示:
class AddDefaultsToModel < ActiveRecord::Migration[5.2]
def change
change_column :posts, :post_type, :string, default: 'draft'
change_column :posts, :date_time, :datetime, default: -> { 'CURRENT_TIMESTAMP' }
end
end
Run Code Online (Sandbox Code Playgroud)
直接添加到数据库时,默认值效果很好。但是,如果我在 Rails 中构建一个新模型,一个属性会按预期工作,而另一个则不会:
post = Post.new
post.post_type # draft (as expected)
post.date_time # nil (expecting the current date and time)
Run Code Online (Sandbox Code Playgroud)
这种行为是故意的吗?我是否也必须在模型中设置默认值?为什么Post#post_type有效但无效Post#date_time?
在我的应用程序中,我有团队,每个团队每周都有一个游戏时间.我希望将游戏时间设置为"现在"作为默认值.我的桌子是这样设置的
create_table "teams", force: true do |t|
t.datetime "wk1_time"
end
Run Code Online (Sandbox Code Playgroud)
我创建了一个迁移,它看起来像这样:
class ChangeDateTimeDefault < ActiveRecord::Migration
def change
change_column :teams, :wk1_time, :default => DateTime.now
end
edn
Run Code Online (Sandbox Code Playgroud)
当我运行rake db:migrate时出现错误.我的语法错了还是我错过了其他的东西?