如何在将控制器从控制器移动到助手时修复Rails代码?

时间:2013-08-14 16:02:12

标签: html ruby-on-rails ruby-on-rails-3 views helper

在我网站上的每个text_area上,我有一个select_box用于选择语言。它通常使用某些默认语言,但有时会检查自定义选项。我最初在控制器中安装了阵列:

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

然后它将被视图访问:

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

这很好用,text_area会显示语言并传递数字。但是,我现在想为每个页面添加多个text_areas,因此我将代码移动到帮助程序中,并从视图中的每个text_area访问帮助程序:

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

然而,现在text_area搞砸了,显示数组而不是语言:

  

[“english”,1]

如何修复它(不更改当前存储的数组)?我还希望帮助器中的变量可用于页面上的javascript。是否有更好的方法来处理多个“事物”,而不是将所有内容从控制器移动到帮助者?

1 个答案:

答案 0 :(得分:1)

您可以将它们作为像这样的哈希值放在模型中

<强> user.rb

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

并在控制器中获取散列到变量中,它将在html.erb和js.erb中可访问

<强> users_controller.rb

@language = User.language

然后在构建表单时,您可以将其作为

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