Ruby on rails Rails给关系表带来问题,SQLite3::SQLException:没有这样的列

Ruby on rails Rails给关系表带来问题,SQLite3::SQLException:没有这样的列,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,relational-database,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Relational Database,似乎找不到解决这个问题的办法。我有一个关系表BlabsUser,我试图从中查找并销毁一条记录。我正在这样做: BlabsUser.find_by_user_id_and_blab_id(1,29).destroy 得到这个可爱的错误: BlabsUser Load (0.2ms) SELECT "blabs_users".* FROM "blabs_users" WHERE "blabs_users"."user_id" = 1 AND "blabs_users"."blab_id" = 2

似乎找不到解决这个问题的办法。我有一个关系表BlabsUser,我试图从中查找并销毁一条记录。我正在这样做:

BlabsUser.find_by_user_id_and_blab_id(1,29).destroy
得到这个可爱的错误:

BlabsUser Load (0.2ms)  SELECT "blabs_users".* FROM "blabs_users" WHERE "blabs_users"."user_id" = 1 AND "blabs_users"."blab_id" = 29 LIMIT 1
Could not log "sql.active_record" event. NoMethodError: undefined method `name' for nil:NilClass
SQLite3::SQLException: no such column: blabs_users.: DELETE FROM "blabs_users" WHERE "blabs_users"."" = ?
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: blabs_users.: DELETE FROM "blabs_users" WHERE "blabs_users"."" = ?
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/sqlite3-1.3.5/lib/sqlite3/database.rb:91:in `initialize'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/sqlite3-1.3.5/lib/sqlite3/database.rb:91:in `new'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/sqlite3-1.3.5/lib/sqlite3/database.rb:91:in `prepare'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/sqlite_adapter.rb:234:in `block in exec_query'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/sqlite_adapter.rb:223:in `exec_query'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/sqlite_adapter.rb:249:in `exec_delete'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/database_statements.rb:101:in `delete'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `delete'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/relation.rb:351:in `delete_all'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/persistence.rb:94:in `destroy'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/locking/optimistic.rb:119:in `destroy'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/callbacks.rb:254:in `block in destroy'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.3/lib/active_support/callbacks.rb:390:in `_run_destroy_callbacks'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.3/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/callbacks.rb:254:in `destroy'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/transactions.rb:236:in `block in destroy'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/transactions.rb:295:in `block in with_transaction_returning_status'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/transactions.rb:208:in `transaction'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/transactions.rb:293:in `with_transaction_returning_status'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/transactions.rb:236:in `destroy'
    from (irb):1
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start'
    from /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
根据请求编辑2: 我的模型只是

class BlabsUser < ActiveRecord::Base
end
class BlabsUser
移民只是

class BlabsUsers < ActiveRecord::Migration
  def self.up
      create_table :blabs_users, :id => false, :force => true do |t|
          t.integer :user_id
          t.integer :blab_id
          t.timestamps
      end
  end

  def self.down
      drop_table :blabs_users
  end
end
class BlabsUsersfalse,:force=>true do | t|
t、 整数:用户id
t、 整数:blab_id
t、 时间戳
结束
结束
def自动关闭
drop_表:blabs_用户
结束
结束

ActiveRecord很大程度上依赖于使用一个唯一的键(通常是表的主键),因为您没有明确定义一个键(
:id=>false
),我强烈怀疑您的问题与此相关


也被记录为销毁具有给定id的对象(或多个对象),这强烈表明它需要使用唯一id。

发布迁移文件和模型请注意表中是否定义了主键?@JoachimIsaksson为什么需要?如果我只是通过blab_id和user_id查找…@varatis并没有为ActiveRecord找任何借口,但它非常依赖主键
destroy()
被记录为销毁一个(或多个)具有给定id的对象,这似乎表明它也想要一个id来使用。@JoachimIsaksson好的,我稍后会尝试一下。你可能想发表你的评论作为回答,这样我就不会回答我自己的问题:)谢谢。很不幸,ActiveRecord强制使用这个额外字段。
class BlabsUsers < ActiveRecord::Migration
  def self.up
      create_table :blabs_users, :id => false, :force => true do |t|
          t.integer :user_id
          t.integer :blab_id
          t.timestamps
      end
  end

  def self.down
      drop_table :blabs_users
  end
end