Rails渲染来自其他控制器的选择选项

时间:2014-09-22 02:29:13

标签: ruby-on-rails select controller

查看:

<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    

2 个答案:

答案 0 :(得分:1)

Helper

您最好使用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的基本构建块之一,允许您创建最具适应性的系统:

enter image description here

具体来说,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>