undefined method `collect' for 1:Fixnum

I am trying to do the following

<%= effort.user_id.collect(&:full_name) %>

When I run my app I get the following error: undefined method
`collect' for 1:Fixnum

I may be incorrect.

User.rb

class User < ActiveRecord::Base
include ActiveModel::Validations

  has_many :roles_users
  has_many :roles, :through => :roles_users
  has_many :projects
  has_many :password_histories
  has_many :efforts

Efforts.rb

class Effort < ActiveRecord::Base
  belongs_to :project_task
  belongs_to :user
end

Where am i going wrong?

I am trying to do the following

<%= effort.user_id.collect(&:full_name) %>

When I run my app I get the following error: undefined method
`collect' for 1:Fixnum

What is that supposed to do ? user_id is an integer so calling collect
on it doesn't make any sense.

Fred

#collect is a method you find on Enumerable objects; for example, Arrays. It is a synonym for #map, and lets you apply a block to each element of the collection:

    [1, 2, 3, 4].collect{|x| x * 2} # => [2, 4, 6, 8]

You can't send #collect to an integer (which is what you're doing here). It's undefined, and doesn't make any sense anyway.

What are you trying to do with this line of code? My guess is that you're trying to get the full_name attribute of the user that the effort belongs to.

If so, remember that the association gives you a method to get the full User object, not just the User's ID:

    effort.user

Once you have that, you can call the #full_name method directly:

    effort.user.full_name

Is that what you're looking for?

Chris