查看:
<div class="field">
<%= f.label :company %><br />
<%= f.select :company, %w(A B C), :selected => 'B'%>
</div>
我要渲染的控制器&#39;选择选项&#39; (这不是我视图的控制器):
def load_company_code
@company_code = [['A', 1], ['B', 2], ['C', 3]]
end
答案 0 :(得分:1)
您最好使用helper
:
#app/helpers/application_helper.rb
class ApplicationHelper
def company_codes
[['A', 1], ['B', 2], ['C', 3]]
end
end
你必须记住Rails只是Ruby的一个框架(事实上,它实际上是一个gem
),这意味着尽管Rails在幕后拥有大量的逻辑,但最终它与所有其他应用程序 - 它将加载一系列为其提供功能的文件
您遇到的一个问题是,在controllers
中包含方法意味着在加载特定控制器时,仅可以访问这些方法。另一方面,每次运行应用程序时都会加载Rails的帮助程序,从而允许您在需要时调用它们的方法:
<%= f.label :company %>
<%= f.select :company, company_codes, :selected => 'B'%>
-
<强>框架强>
为了简要概述这些内容的工作原理,您最好先了解MVC (Model View Controller) programming pattern。这是Rails的基本构建块之一,允许您创建最具适应性的系统:
具体来说,MVC意味着每次您的应用程序收到请求时,它都会将请求路由到您的控制器,然后从模型构建数据,显示视图中的数据。这里的区别在于,为了调用所需的方法,必须加载它们所属的类
如上图所示,只有某些控制器&amp;模型类加载每个请求。如果你想在那些内部调用一个方法,只要在请求时加载它们就可以了。或者,您需要加载一个始终存在的类,您可以在需要时调用该方法
答案 1 :(得分:0)
您的表单代表什么型号?通常,在控制器上保留此类数据并不是一个好习惯。你应该将它保存在模型类中,可能是一个常数。
假设您有一个Employee类,company是Employee的一个属性,表单是一个employee对象:
<%= form_for @employee do |f| %>
将公司代码保留为员工类的常量会很好:
class Employee < ActiveRecord::Base
COMPANY_CODES = [['A', 1], ['B', 2], ['C', 3]]
end
然后,在表单标记内:
<div class="field">
<%= f.label :company %><br />
<%= f.select :company, Employee::COMPANY_CODES %>
</div>