首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlite3::xxxxx.created_at异常: SQLite3::ConstraintException: sqlite3不能为空

Sqlite3::xxxxx.created_at异常: SQLite3::ConstraintException: sqlite3不能为空
EN

Stack Overflow用户
提问于 2012-11-20 07:32:10
回答 3查看 2.8K关注 0票数 2

我有一个重新排序的工作,创建一个艺术家,并将其与用户关联。用户艺术家:artists和艺术家has_and_belongs_to_many :users。

代码语言:javascript
复制
def self.perform(itunes_id, user_id=nil)
  artist = Artist.find_by_itunes_id(itunes_id) || lookup_and_create_artist(itunes_id)
  if user_id && user = User.find(user_id)
    user.artists << artist
    user.save!
  end
end

user.artists << artist会引发此异常:

代码语言:javascript
复制
ActiveRecord::StatementInvalid: SQLite3::ConstraintException: artists_users.created_at may not be NULL: INSERT INTO "artists_users" ("artist_id", "user_id")

我也看到了artists_genres的创建(艺术家和流派也有一种互惠的关系)

代码语言:javascript
复制
ActiveRecord::StatementInvalid: SQLite3::ConstraintException: artists_genres.created_at may not be NULL: INSERT INTO "artists_genres" ("artist_id", "genre_id")
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-21 04:26:47

事实证明,这在Rails中是有目的的,但已经在许多问题中提出:

HABTM关系不会自动设置时间戳,因此我可以删除它们或使用has_many :artists, :through => :artists_genres关系

票数 3
EN

Stack Overflow用户

发布于 2012-11-20 07:45:07

听起来您的时间戳设置不正确。

如果您想通过创可贴来摆脱它,可以将这两个字段重新定义为NULLable (而不是NOT NULL)。

问题通常发生在应用程序配置错误时。

请确保

代码语言:javascript
复制
config.active_record.record_timestamps = true

如果为false,则不会设置时间戳,您将看到约束错误。

票数 0
EN

Stack Overflow用户

发布于 2012-11-20 07:46:01

听起来您的迁移没有正确设置时间戳字段。它应该是这样的:

代码语言:javascript
复制
create_table :artists_users, :id => false do |t|
  t.references :artist
  t.references :user
  t.timestamps
end

create_table :artists_genres, :id => false do |t|
  t.references :artist
  t.references :genre
  t.timestamps
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13464299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档