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 >