has_many relation - NoMethodError

Hi

I have following tables:
Ressort
-name

Worker
-name
-ressort_id

then i defined that
Worker
  belongs_to :ressort
and
Ressort
  has_many: workers

Then I did rake db:migrate
And now I try to show all workers belongig to a ressort from console:
Ressort.find(1).workers
but get: NoMethodError: undefined method `workers' for #<Ressort:
0x2a7cc98>

Is it because i have to create new worker and ressort entries first
now, or is my console request wrong?

BR
rogi

typo:
has_many :workers

...move the colon, and see what happens.

Nothing, I only had the typo here.
So, still facing the problem!

class Ressort < ActiveRecord::Base
  has_many :workers
end

Does it work the other way around? can you call "Worker.first.ressort"?

No:

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column:
ressorts.worker_id: SELECT "ressorts".* FROM "ressorts" WHERE
("ressorts".worker_id = 1) LIMIT 1

irb(main):037:0> Ressort
=> Ressort(id: integer, name: string, description: text, created_at:
datetime, updated_at: datetime)

This is weird. Could you paste your migration files and schema. Also, did you override the find method

for Worker class?

No:

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column:
ressorts.worker_id: SELECT "ressorts".* FROM "ressorts" WHERE
("ressorts".worker_id = 1) LIMIT 1

What command did you type to get this return value? It's certainly
weird if you asked for "Worker.first"... (or Worker.all.first)

irb(main):037:0> Ressort
=> Ressort(id: integer, name: string, description: text, created_at:
datetime, updated_at: datetime)

...And what if you display "Worker"?

I think your migrations would help too... I really don't think you've
quite got all the structure in place yet.

irb(main):038:0> Ressort.find(1).workers
NoMethodError: undefined method `workers' for #<Ressort:0x3215328>

irb(main):039:0> Worker.first.ressort
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column:
ressorts.worker_id: SELECT "ressorts".* FROM "re
ssorts" WHERE ("ressorts".worker_id = 1) LIMIT 1

=> Worker(id: integer, first_name: string, last_name: string,
created_at: datetime, updated_at: datetime, ressort_id: in
teger)

class AddRessortIdToWorkers < ActiveRecord::Migration
  def self.up
    add_column :workers, :ressort_id, :integer
  end

  def self.down
    remove_column :workers, :ressort_id
  end
end

class CreateRessorts < ActiveRecord::Migration
  def self.up
    create_table :ressorts do |t|
      t.string :name
      t.text :description

      t.timestamps
    end
  end

  def self.down
    drop_table :ressorts
  end
end

irb(main):038:0> Ressort.find(1).workers
NoMethodError: undefined method `workers' for #<Ressort:0x3215328>

irb(main):039:0> Worker.first.ressort
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column:
ressorts.worker_id: SELECT "ressorts".* FROM "re
ssorts" WHERE ("ressorts".worker_id = 1) LIMIT 1

Can you paste the contents of ressort.rb and worker.rb? Do not
re-type them, copy and paste here please.
Also db/schema.rb

Colin

class Worker < ActiveRecord::Base
  has_many :trainings
  has_many :courses, :through => :trainings
  belongs_to :ressort

  def firstname_and_name
  first_name+" "+last_name
  end
end

could you confirm if the error still exists if you drop your db and remigrate?

class Worker < ActiveRecord::Base
has_many :trainings
has_many :courses, :through => :trainings
belongs_to :ressort

   def firstname\_and\_name
   first\_name\+&quot; &quot;\+last\_name
   end

end

---
class Ressort < ActiveRecord::Base
has_many :workers
end

---

class Course < ActiveRecord::Base
has_many :trainings
has_many :workers, :through => :trainings
end

Please don't top post, it makes it difficult to follow the thread.
Insert your reply at appropriate point in previous message. Thanks.

This really makes no sense to me. Is it possible that you have some
old files (backup files for example) in the app/model folder that may
be confusing rails? Have a look and remove anything extra there. Are
you *absolutely* sure you are looking at the right files? I know it
seems a stupid question but I remember once I had made a complete copy
of an application as a temporary backup and was editing the files in
one folder and running the server in the other. It took me a little
time to work out why nothing I changed seemed to make any difference
:slight_smile:

Colin

This really makes no sense to me.

+1
Everything looks good... nothing is jumping out at me - but the error
messages you're getting don't tie with what code/migrations you have.

Have a look and remove anything extra there. Are
you *absolutely* sure you are looking at the right files?

It could be worth just moving up one folder and typing "rails
project2" and starting again - you can copy the migrations and model
files over and check things one step at a time.

How can I drop and remigrate?

I tried following tutorial
http://biodegradablegeek.com/2007/12/understanding-basic-database-relationships-in-rails/
and also got the problem again:
irb(main):019:0> tune.genre = Genre.find_by_name('Blues Rock')
NoMethodError: undefined method `genre=' for #<Song:0x3d08228>

So maybe i have a general problem .....

one alternative:

  rake db:migrate VERSION=0
  rake db:migrate

In the same boat here. Did you ever resolve this?

Dan

And tadda… for me it was reloading the console. I updated the relations but didn’t reload the console… D’oh!