Вопрос

Class is a reserved word, so I have changed the table name from class_assignment to cassignments to avoid any chance that that is the error causing it (despite me having class_instruction(s). I have tried plural and singular versions, and still get the error. The cassignments table is a middle table for the many to many relationship between assignments and class_instructions.

Schema :

ActiveRecord::Schema.define(:version => 20130524160107) do

  create_table "assignments", :force => true do |t|
    t.string   "name"
    t.string   "fractionRepresentations"
    ....etc...
    t.datetime "created_at",                  :null => false
    t.datetime "updated_at",                  :null => false
  end

  create_table "cassiggnments", :force => true do |t|
    t.integer  "class_instruction_id"
    t.integer  "assignment_id"
    t.datetime "created_at",           :null => false
    t.datetime "updated_at",           :null => false
  end

  add_index "cassiggnments", ["assignment_id"], :name => "index_class_assignment_on_assignment_id"
  add_index "cassiggnments", ["class_instruction_id"], :name => "index_class_assignment_on_class_instruction_id"

  create_table "class_instructions", :force => true do |t|
    t.string   "name"
    t.datetime "time"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.integer  "person_id"
  end

  add_index "class_instructions", ["person_id"], :name => "index_class_instructions_on_person_id"

  ....etc....

end

Trying to seed the db in the seed.rb

# ClassInstruction Assignment
  cia1 = Cassignment.create({ class_instruction_id: 4, assignment_id: 1 }, :without_protection => true ).save!

and I get the error:

rake aborted!
Could not find table 'cassignments'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/connection_adapters/sqlite_adapter.rb:465:in `table_structure'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/connection_adapters/sqlite_adapter.rb:346:in `columns'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/connection_adapters/schema_cache.rb:12:in `block in initialize'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:228:in `yield'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:228:in `default'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:228:in `columns'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:243:in `column_defaults'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/base.rb:479:in `initialize'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/persistence.rb:44:in `new'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/persistence.rb:44:in `create'
/Users/special/dev/SoundOfFractions/db/seeds.rb:83:in `<top (required)>'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:245:in `load'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:245:in `block in load'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:236:in `load_dependency'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:245:in `load'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/railties-3.2.2/lib/rails/engine.rb:520:in `load_seed'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/railties/databases.rake:309:in `block (2 levels) in <top (required)>'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:246:in `call'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:246:in `block in execute'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:241:in `each'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:241:in `execute'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:184:in `block in invoke_with_call_chain'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:177:in `invoke_with_call_chain'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:205:in `block in invoke_prerequisites'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:203:in `each'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:203:in `invoke_prerequisites'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:183:in `block in invoke_with_call_chain'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:177:in `invoke_with_call_chain'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:170:in `invoke'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.2/lib/active_record/railties/databases.rake:252:in `block (2 levels) in <top (required)>'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:246:in `call'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:246:in `block in execute'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:241:in `each'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:241:in `execute'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:184:in `block in invoke_with_call_chain'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:177:in `invoke_with_call_chain'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/task.rb:170:in `invoke'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/application.rb:143:in `invoke_task'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/application.rb:101:in `block (2 levels) in top_level'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/application.rb:101:in `each'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/application.rb:101:in `block in top_level'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/application.rb:110:in `run_with_threads'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/application.rb:95:in `top_level'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/application.rb:73:in `block in run'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/application.rb:160:in `standard_exception_handling'
/Users/special/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.0.4/lib/rake/application.rb:70:in `run'
/Users/special/.rvm/gems/ruby-1.9.3-p362/bin/ruby_noexec_wrapper:14:in `eval'
/Users/special/.rvm/gems/ruby-1.9.3-p362/bin/ruby_noexec_wrapper:14:in `<main>'
Tasks: TOP => db:setup => db:seed

The only strange thing is that despite my migrations, I didn't get a cassignment.rb model, so I had to manually create that (maybe I didn't use scaffold, what I am normally used to doing, but I digress). So for posterity, here is the cassignment.rb

class Cassignment < ActiveRecord::Base
  belongs_to :class_instruction
  belongs_to :assignment
end

naming pluralization matches other many to many relationship tables, and seed structures, but I have no clue where I am going wrong, other than the understanding that the seed file can't find the table, that does exist according to the sqlite browser, and is correctly called cassignments (plural).

Это было полезно?

Решение

You've created a table called cassiggnments with two 'g's

Другие советы

Is this a has_and_belongs_to_many relationship or a has_many :through relationship?

HABTM only: In the former case you don't need the model and it's important that the table name be both of the joining table names in alphabetical order. assignments_class_instructions

In both cases, the correct approach to creating a join is to add instances of one class to instances of the other rather than creating the joins directly.

class_instruction = ClassInstruction.find(4)
class_instruction.assignments << Assignment.find(1)

Also, there is no problem with class_assignments and ClassAssignment as table and model names, so that isn't the issue.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top