将 Rails 代码从控制器移动到助手时如何修复它?
Posted
技术标签:
【中文标题】将 Rails 代码从控制器移动到助手时如何修复它?【英文标题】:How to Fix Rails Code when Moving it From Controller to Helpers? 【发布时间】: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。有没有比将所有东西从控制器转移到助手更好的方法来处理多个“事物”?
【问题讨论】:
【参考方案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' %>
【讨论】:
是的,我应该将更多的东西移到模型中(尽管作为一个常规的实例方法),我也可以保持它以前的形式。谢谢。以上是关于将 Rails 代码从控制器移动到助手时如何修复它?的主要内容,如果未能解决你的问题,请参考以下文章
在哪里放置不是模型、视图、控制器或助手的 Rails 代码?