Problems with associations

Hello guys, I have two tables, tasks and projects, and each model I put:

Task.rb

class Task < ActiveRecord::Base   attr_accessible :user_id, :project_id, :name   belongs_to :project end

Project.rb

class Project < ActiveRecord::Base   attr_accessible :name, :description   has_many :tasks end

But when I go to my prompt and I make a SELECT with task, none project is returned.

irb(main):001:0> Task.all   ←[1m←[36mTask Load (0.0ms)←[0m ←[1mSELECT `tasks`.* FROM `tasks` ←[0m   ←[1m←[35mEXPLAIN (30.0ms)←[0m EXPLAIN SELECT `tasks`.* FROM `tasks` EXPLAIN for: SELECT `tasks`.* FROM `tasks`

irb(main):001:0> Task.all

=> [#<Task id: 1, user_id: nil, project_id: 1, name: "W\r<br>T\r<br>F\r<br>VERY\r<br...", del eted: 0, done: 0, created_at: "2012-06-24 15:46:37", updated_at: "2012-06-30 17:13:27">, #<Task id: 2, user_id: nil, pro ject_id: 1, name: "Teste", deleted: 0, done: 0, created_at: "2012-06-30 17:11:27", updated_at: "2012-06-30 17:11:27">]

I guess the project name should come too ? right ?

Wrong.

What am I doing wrong ?

Misunderstanding ActiveRecord and associations :slight_smile:

Revisiting the relevant Rails guides might be a good idea.

Nothing. The project will only be fetched if you use :include in the query. However, for one of the tasks fetched above you can still say task.project and it will fetch the project then.

Colin

Hello Colin, thank you for your answer..

I tryed this:

irb(main):001:0> task = Task.all   ←[1m←[36mTask Load (1.0ms)←[0m ←[1mSELECT `tasks`.* FROM `tasks` ←[0m   ←[1m←[35mEXPLAIN (1.0ms)←[0m EXPLAIN SELECT `tasks`.* FROM `tasks` EXPLAIN for: SELECT `tasks`.* FROM `tasks`

irb(main):001:0> task = Task.all

Model.all is clearly intended to return multiple results; it would be more appropriate to say `tasks = Task.all`

irb(main):002:0> task.project NoMethodError: undefined method `project' for #<Array:0x482b068>

in which case you would be calling e.g.

tasks.first.project or tasks.each{ |task| puts task.project.inspect } or whatever

Thanks a lot Hassan, I tryed with tasks.first.project and everything is OK.

Thanks again.