【问题标题】:How to Fix Rails Code when Moving it From Controller to Helpers?将 Rails 代码从控制器移动到助手时如何修复它?
【发布时间】:2013-08-14 16:02:12
【问题描述】:

在我网站上的每个 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_area,所以我将代码移到了一个帮助器中,并从视图中的每个 text_area 访问该帮助器:

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

但是,现在 text_area 出现混乱,并显示数组而不仅仅是语言:

["英文", 1]

如何修复它(不更改当前存储的数组)?我还希望帮助程序中的变量可用于页面上的 javascript。有没有比将所有东西从控制器转移到助手更好的方法来处理多个“事物”?

【问题讨论】:

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


    【解决方案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'} %>
    

    【讨论】:

    • 是的,我应该将更多的东西移到模型中(尽管作为一个常规的实例方法),我也可以保持它以前的形式。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 2012-02-17
    • 2015-10-01
    • 1970-01-01
    相关资源
    最近更新 更多