am-rails
am-rails

Reputation: 1473

How to Fix Rails Code when Moving it From Controller to Helpers?

On each text_area on my site, I have a select_box for selecting the language. It often uses certain default languages, but sometimes checks for custom options. I initially had the array setup in the controller:

@language_array = [  ["english", 1], ["french", 2], ["spanish", 3]  ]
@language_array = get_custom_array if custom_language?

And it would then be accessed by the view:

 <%= select_tag(:language, options_for_select(language_array, default_language) )%>

This worked fine, and the text_area would display the language and pass on the number. However, I would now like to add multiple text_areas to each page, so I moved the code into a helper, and access the helper from every text_area in the view:

language_array = get_language_array(thing.id)
<%= select_tag(:language, options_for_select(language_array, default_language) )%>

However, now the text_area comes out messed up, and displays the array instead of just the language:

["english", 1]

How can I fix it (without changing the currently stored arrays)? I also want variables from the helper to be available to javascript on the page. Is there a better way to deal with multiple "things" than to move everything from the controller to the helpers?

Upvotes: 0

Views: 111

Answers (1)

Charizard_
Charizard_

Reputation: 1245

You could have them inside the model as a hash like this

user.rb

 def User
    def self.language
      {
      'English' => '1',
      'French' => '2',
       ....
      }
    end
 end

and in the controller obtain the hash into a variable and it will be accessible in both the html.erb and the js.erb

users_controller.rb

@language = User.language

Then while building the form you can do it as

<%= talent_field.select(:language, @language, {}, {:class => 'language-select'} %>

Upvotes: 1

Related Questions