Have 2 tables - clients & case_managers
class Client < ActiveRecord::Base
has_one :case_manager
end
app/views/clients/_form.html contains line...
<p><% collection_select("client",
"case_manager_id", \
case_manager.find_all, "name", "id") %></p>
and this line generates error...
undefined local variable or method `case_manager'' for
#<#<Class:0xb7b93f84>:0xb7b93b88>
What should the collection_select statement look like for it to populate
a pop-up select list of the names column from case_managers table?
for reference;
clients table has defined...
id integer primary key not null
case_manager_id not null
foreign key (case_manager_id) references case_managers(id)
case_managers table has defined
id integer primary key not null
name character varying 53 not null
no foreign keys
case_managers_clients table has defined
client_id integer not null
case_manager_id integer not null
no primary key
Miguel Enrique Cobá Martínez
2006-Jan-26 17:56 UTC
[Rails] select list generated from table
Craig White wrote:> Have 2 tables - clients & case_managers > > class Client < ActiveRecord::Base > has_one :case_manager > end > > app/views/clients/_form.html contains line... > > <p><% collection_select("client", "case_manager_id", \ > case_manager.find_all, "name", "id") %></p> >Maybe: <p><% collection_select("client", "case_manager_id", \ CaseManager.find(:all), "id", "name") %></p> supposing CaseManager is the model for your table> and this line generates error... > undefined local variable or method `case_manager'' for > #<#<Class:0xb7b93f84>:0xb7b93b88> > > What should the collection_select statement look like for it to populate > a pop-up select list of the names column from case_managers table? > > for reference; > > clients table has defined... > id integer primary key not null > case_manager_id not null > foreign key (case_manager_id) references case_managers(id) > > case_managers table has defined > id integer primary key not null > name character varying 53 not null > no foreign keys > > case_managers_clients table has defined > client_id integer not null > case_manager_id integer not null > no primary key > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
<% @case_managers = CaseManager.find(:all).collect {|c| [c.name, c.id]}
-%>
<%= select ''client'', ''case_manager_id'',
@case_managers %>
Personally, I would put the first of the two statements in the
controller, because I don''t like seeing find() in the view.
If you have a large number of Case Managers, you could write a
more-optimized way of building that list, and make it a class method
in CaseManager.
class CaseManager < ActiveRecord::Base
def self.case_manager_options
managers = connection.select_all("select name, id from
case_managers")
managers.collect {|m| m.values}
end
end
Then, in your view, you can just do:
<%= select ''client'', ''case_manager_id'',
CaseManager.case_manager_options %>
Warning: People will now complain that this is premature optimization.
Only do it if it makes this easier/faster for you. Myself, I like
having this sort of thing taken care of by the model.
P.S. The difference between select and collection_select is that
select takes care of selecting the current value for you. Saves you a
step.
Good luck,
--Wilson.
On 1/25/06, Craig White <craigwhite@azapple.com>
wrote:> Have 2 tables - clients & case_managers
>
> class Client < ActiveRecord::Base
> has_one :case_manager
> end
>
> app/views/clients/_form.html contains line...
>
> <p><% collection_select("client",
"case_manager_id", \
> case_manager.find_all, "name", "id") %></p>
>
> and this line generates error...
> undefined local variable or method `case_manager'' for
> #<#<Class:0xb7b93f84>:0xb7b93b88>
>
> What should the collection_select statement look like for it to populate
> a pop-up select list of the names column from case_managers table?
>
> for reference;
>
> clients table has defined...
> id integer primary key not null
> case_manager_id not null
> foreign key (case_manager_id) references case_managers(id)
>
> case_managers table has defined
> id integer primary key not null
> name character varying 53 not null
> no foreign keys
>
> case_managers_clients table has defined
> client_id integer not null
> case_manager_id integer not null
> no primary key
>
> _______________________________________________
> Rails mailing list
> Rails@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails
>