has_many relation - NoMethodError

125 views
Skip to first unread message

rogi

unread,
Feb 20, 2011, 7:33:05 AM2/20/11
to Ruby on Rails: Talk
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

Michael Pavling

unread,
Feb 20, 2011, 7:40:14 AM2/20/11
to rubyonra...@googlegroups.com
On 20 February 2011 12:33, rogi <patrik...@googlemail.com> wrote:
> Ressort
>  has_many: workers

typo:
 has_many :workers

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

rogi

unread,
Feb 20, 2011, 7:47:52 AM2/20/11
to Ruby on Rails: Talk
Nothing, I only had the typo here.
So, still facing the problem!

class Ressort < ActiveRecord::Base
has_many :workers
end

On Feb 20, 1:40 pm, Michael Pavling <pavl...@gmail.com> wrote:

Michael Pavling

unread,
Feb 20, 2011, 7:57:18 AM2/20/11
to rubyonra...@googlegroups.com
On 20 February 2011 12:47, rogi <patrik...@googlemail.com> wrote:
> Nothing, I only had the typo here.
> So, still facing the problem!

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

rogi

unread,
Feb 20, 2011, 8:23:59 AM2/20/11
to Ruby on Rails: Talk
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)


On Feb 20, 1:57 pm, Michael Pavling <pavl...@gmail.com> wrote:

Jim Ruther Nill

unread,
Feb 20, 2011, 9:50:00 AM2/20/11
to rubyonra...@googlegroups.com
This is weird.  Could you paste your migration files and schema.  Also, did you override the find method
for Worker class?

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.




--
-------------------------------------------------------------
visit my blog at http://jimlabs.heroku.com

Michael Pavling

unread,
Feb 20, 2011, 10:05:07 AM2/20/11
to rubyonra...@googlegroups.com
On 20 February 2011 13:23, rogi <patrik...@googlemail.com> wrote:
> 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.

rogi

unread,
Feb 20, 2011, 11:59:58 AM2/20/11
to Ruby on Rails: Talk
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



On Feb 20, 4:05 pm, Michael Pavling <pavl...@gmail.com> wrote:

Colin Law

unread,
Feb 20, 2011, 4:46:44 PM2/20/11
to rubyonra...@googlegroups.com
On 20 February 2011 16:59, rogi <patrik...@googlemail.com> wrote:
> 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

rogi

unread,
Feb 21, 2011, 4:30:55 AM2/21/11
to Ruby on Rails: Talk
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

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

---

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



On 20 Feb., 22:46, Colin Law <clan...@googlemail.com> wrote:

Michael Pavling

unread,
Feb 21, 2011, 5:59:00 AM2/21/11
to rubyonra...@googlegroups.com
On 21 February 2011 10:50, Colin Law <cla...@googlemail.com> wrote:
> 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.

Jim Ruther Nill

unread,
Feb 21, 2011, 5:31:37 AM2/21/11
to rubyonra...@googlegroups.com
could you confirm if the error still exists if you drop your db and remigrate?

For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Colin Law

unread,
Feb 21, 2011, 5:50:24 AM2/21/11
to rubyonra...@googlegroups.com
On 21 February 2011 09:30, rogi <patrik...@googlemail.com> wrote:
> 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
>
> ---
> 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
:)

Colin

rogi

unread,
Feb 24, 2011, 8:31:29 AM2/24/11
to Ruby on Rails: Talk
How can I drop and remigrate?

rogi

unread,
Feb 24, 2011, 8:33:14 AM2/24/11
to Ruby on Rails: Talk
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 .....

On 21 Feb., 11:59, Michael Pavling <pavl...@gmail.com> wrote:

Michael Pavling

unread,
Feb 24, 2011, 8:47:39 AM2/24/11
to rubyonra...@googlegroups.com
> On 21 Feb., 11:31, Jim Ruther Nill <jvn...@gmail.com> wrote:
>> could you confirm if the error still exists if you drop your db and
>> remigrate?
>>
On 24 February 2011 13:31, rogi <patrik...@googlemail.com> wrote:
> How can I drop and remigrate?

one alternative:

rake db:migrate VERSION=0
rake db:migrate

tappind

unread,
Aug 26, 2012, 12:44:22 AM8/26/12
to rubyonra...@googlegroups.com
In the same boat here.  Did you ever resolve this?

Dan

tappind

unread,
Aug 26, 2012, 1:00:50 AM8/26/12
to rubyonra...@googlegroups.com
And tadda... for me it was reloading the console.  I updated the relations but didn't reload the console... D'oh!
Reply all
Reply to author
Forward
0 new messages