← Back to Upcase

How to populate a Rails dropdown menu with a json array

(Jameson Trinker) #1

I have an Ant show page that displays detailed information about various types of ants. On that page there are two drop downs, one for environment: [indoor, outdoor], and one for diet: [sugar, fat, protein].

When you select a param from each it renders out a product page depending on the params. However, some combinations result in nil, like a carpenter ant doesn’t have a product associated with indoor, sugar.

I’m trying to get the dropdowns to populate based on whether or not a combination is nil. If someone selects indoor I’d like sugar to not appear in the next drop down if that combo doesn’t exist.

So far I have I have two methods creating json arrays for only the available items:

def food_sources
  food_sources = Ant.find(params[:ant_id]).product_recommendations.where(environment: params[:environment]).map(&:diet)
  render json: food_sources.to_json

def environments
  environments = Ant.find(params[:ant_id]).product_recommendations.where(diet: params[:diet]).map(&:environment)
  render json: environments.to_json

For example, if I input


into the browser it returns


bc for the ant with an id of 27 only has two options for outdoor indoor diets, instead of the possible three.

My question is how do I pass this array into my rails dropdown if someone picked the above combination? Right now my drop down looks a little like this:

= select_tag :environment, options_for_select([["Select One"], "Indoor", "Outdoor"])