Selecting a model

Sure, I assume you do a query for the countries -> @countries = Country.find(:all)

for starters do this
@countries = Country.find(:all, :include => ‘languages’) which will get the languages in the same query.

Now, in the select you have options_for_select=[array] so you have to build an array that looks like this [“USA - English”,“France-French”,“England-English”,…]

I would suggest that you create a helper method

def country_options(country_array)
reponse_array = []
country_array.each do |country|
response_array << country.name + " - " +
country.language.name

end
return reponse_array
end

reponse array wil now look like this [“USA - English”,“France-French”,“England-English”,…]

so you can do <%= select_tag(:country, options_for_select(country_options(@countries))) %> and that will give you the select you wanted.

Hi --

Sure, I assume you do a query for the countries -> @countries =
Country.find(:all)

for starters do this
@countries = Country.find(:all, :include => 'languages') which will get the
languages in the same query.

Now, in the select you have options_for_select=[array] so you have to build
an array that looks like this ["USA -
English","France-French","England-English",...]

I believe you'd actually need something like:

  [ ["USA-English", "USA"], ["France-French", "French"], ... ]

so that you're providing both a label and a value for each option.

I would suggest that you create a helper method

def country_options(country_array)
  reponse_array = []
  country_array.each do |country|
    response_array << country.name + " - " + country.language.name
  end
  return reponse_array
end

You've just reimplemented map :slight_smile: You can let Ruby do more of the
work (untested):

  def country_options(countries)
     countries.map do |country|
       [country.name + '-' + country.language.name, country.name]
     end
  end

You could also use country.id instead of country.name for the value,
which might make it slightly easier to pull the record later.

David

Thanks David.

Yes, I should have done the [text_value,id] - forgot about that :slight_smile:

map! nice, yeah, thanks for the tip. So map creates an array populated with the result of the block for each element in the array that is being mapped?

the result is then the array containing the results for each of the original elements.

thanks again

Ivor