Setting a default option for a select list of a new object


#1

Yet another Rails newby getting his feet wet…

I have a lookup table for states in a database that I use to create a
select list for objects with addresses.

When creating a new object (a business, in this case), I want the
“State” select field to automatically have, say, Idaho selected. How
do I do that? Here’s my code so far:

Business Controller

def new
@business = Business.new
@states = State.find(:all) # so the _form partial can
create the select list
end

Business Model

belongs_to :state #set up the relationship between Businesses
and States

_form partial

<%= select_tag(‘state_id’, options_for_select(@states.collect {|s|
[s.name, s.id]}, @business.state_id)) %>

The @business.state_id will select the state for a business that
already exists when this _form partial is used in the edit view. I
want to have a default state selected (Idaho) for NEW businesses that
isn’t the first one in the list (Alabama).


#2

Hi,

an obvious answer to this would be to have one variable collecting the
State object for Idaho, and one collecting all states. To make it
more dynamic, maybe it’s better to leave the state as a session
variable, or a global variable, or something stored in an object
expressing local preferences …

@local = State.find_by_name(“Idaho”)
@states = State.find(:all)

then, in the form
<%=
options = [[@local.name],[@local.id]] + @states.collect{|s|
[s.name,s.id]}
select(“state”,“id”,options)
%>
(you could maybe add a separator between the local state and the full
list of state
[["--------",""]] or similar)

Elise


#3

I’m wondering if there’s a way to use the initialize method of the
BusinessModel to achieve the desired result…