Forum: Ruby on Rails Problem with collection_select

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
kojilab (Guest)
on 2008-10-08 00:21
(Received via mailing list)
Hi,

I am getting
undefined method `map' for #<UserJob:0x7f42671ae1a8>
with the code below. I've looked everywhere and I don't get what I am
doing wrong

Controller:
@user_jobs = UserJob.find_by_user_id(current_user.id)

View:
<% form_remote_for(@user_project, :complete =>
'editObjectDialog.close()') do |f| %>
  <%= f.error_messages %>
  <% if @user_jobs %>
  <p>
    <%= f.label :user_job %><br />
    <%= collection_select :user_project :user_job_id,
@user_jobs, :id, :title %>
  </p>
  <% end %>
<% end %>

Thanks for your help
Frederick C. (Guest)
on 2008-10-08 00:24
(Received via mailing list)
On Oct 7, 9:05 pm, kojilab <removed_email_address@domain.invalid> wrote:
> Hi,
>
> I am getting
> undefined method `map' for #<UserJob:0x7f42671ae1a8>
> with the code below. I've looked everywhere and I don't get what I am
> doing wrong
>
> Controller:
> @user_jobs = UserJob.find_by_user_id(current_user.id)
>
This is not an array, it's an instance of UserJob. collection_select
expects an array (and judging by the variable name so are you).
Dynamic finds of the form find_by_xxx are analogous to
find :first, ... whereas it looks like you want find_all_by_xxx which
is like a find :all. Having said that, most people would have the
appropriate associations in place so that they could just write
current_user.user_jobs.

Fred
Jay P. (Guest)
on 2008-10-08 09:35
kojilab wrote:
> Hi,
>
> Controller:
> @user_jobs = UserJob.find_by_user_id(current_user.id)
>
> View:
    -----
>     <%= collection_select :user_project :user_job_id,
> @user_jobs, :id, :title %>
>   ----
>
> Thanks for your help

I usually do this:

Controller:
@user_jobs_list=[]
@user_jobs=UserJob.find_by_user_id(current_user.id)
for users in @user_jobs
 @user_jobs_list << [users.name, users.id]
end

and then..
<%=collection select :user_project :user_job_id, @user_jobs_list, :id,
:title%>
Now the collection_select gets what it wants.

Jay
This topic is locked and can not be replied to.