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!