定义和使用与数值对应的文本值数组

时间:2013-08-02 19:24:39

标签: ruby-on-rails ruby form-for

我是Ruby on Rails环境的新手,所以我坚持可能是一个简单的问题:我希望定义一些与数值对应的文本字符串/标签。这些值将存储在数据库中,然后在我的代码中使用而不是数值。

在C中,我会这样:

    #define Accounting  0
    #define Engineering 1
    #define Education   2

......像这样使用:

    if (field_of_study == Accounting) ...

我希望能够在Rails控制器/视图中执行此操作。我目前必须在我的视图中做这样的事情来显示项目:

    <tr>
      <td><%= link_to user.name, user %></td>
      <% if user.studyField == 0 %>
        <td>Accounting</td>
      <% elsif user.studyField == 1 %>
        <td>Engineering</td>
      <% elsif user.studyField == 2 %>
        <td>Education</td>
      <% end %>
    </tr>

我还想在form_for表单的下拉菜单中使用文本字符串/标签,然后使用数字标识符保存它。我是否需要before_save方法来翻译这两种方法,还是他们自动执行此方法?

2 个答案:

答案 0 :(得分:1)

您可能会发现这有用:Ruby on Rails: Where to define global constants?

在Rails中,由于默认情况下所有模型都是自动加载的,您可能会发现在模型中定义常量很方便,如下所示

class User < ActiveRecord::Base
  ACCOUNTING = 0
  ENGINEERING = 1
  EDUCATION = 2
end

甚至

class User < ActiveRecord::Base
  FIELDS = { accounting: 0, engineering: 1, education: 2 }
end

这些可以在User::ACCOUNTINGUser::FIELDS[:accounting]的任何地方使用。要在表单中使用第二个版本,可以使用

select('user', 'study_field', User::FIELDS)

有关详细信息,请参阅select

答案 1 :(得分:0)

有几种方法可以做到这一点。您可以将常量分配给整数,并将它们作为整数保存到数据库中:

# config/initializers/constants.rb
Accounting = 0
Engineering = 1

这有点难看,因为会计在字面上等于零。在Rails控制台中:

Accounting == 0
=> true

但是,这可能是满足您要求的最直接方式,看起来这就是您使用C解决问题的方式。