Rails 4 SQLiteException

时间:2016-01-06 13:29:28

标签: ruby-on-rails sqlite

我遇到了似乎导致问题的SQLiteException。

Schema.rb

create_table "features", force: :cascade do |t|
t.string   "name_key"
t.datetime "created_at"
t.datetime "updated_at"
end

add_index "features", ["name_key"], name: "index_features_on_name_key"

create_table "organizations", force: :cascade do |t|
  t.string   "name"
  t.string   "code"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

create_table "organizations_features", id: false, force: :cascade do |t|
  t.integer "organization_id"
  t.integer "feature_id"
end

这是当前架构,我明确地创建了表organization_features(仍然通过迁移但是引用连接表的单独迁移),否则create_join_table将创建“features_organizations”。在那个过程中,如果我运行

  

rake db:drop db:create db:schema:load

即使没有在任何表中加载单个记录,我仍然会收到以下错误(我从未运行db:seed)。

ActiveRecord::StatementInvalid: SQLite3::SQLException: near ")": syntax error: INSERT INTO "organizations_features" () VALUES ()

other question似乎建议使联接表名称在organization_feature中都是单数,但由于我们与其他服务共享模式,因此我们必须使用相同的命名约定。

注意:即使我尝试使用迁移“create_join_table”创建表,问题似乎仍然存在“

更新:seeds.rb

organization = Organization.create!(name: 'XYZ', code: 'xyz')
feature = Feature.create!(name_key: 'Some Feature')
user = User.create!(name:  "user1",
                     email: "user@abcd.org",
                     password:              "password123",
                     password_confirmation: "password123",
                     profile_id: profile.id)
OrganizationsFeature.create!(feature_id: feature.id, organization_id:  organization.id)

其中OrganizationsFeature看起来像这样

class OrganizationsFeature < ActiveRecord::Base
  belongs_to :organization
  belongs_to :feature
end

1 个答案:

答案 0 :(得分:0)

如果其他人遇到同样的问题我找到了问题的答案。 test / fixtures / organizations_features.yml文件具有空记录

one :{}  
two: {}

导致将空记录插入表中。每次加载此数据,因此插入错误。 拥有适当的数据/删除文件解决了这个问题。