0

我是 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方法来翻译这两者还是它们是一种自动的方法?

4

2 回答 2

1

您可能会发现这很有帮助:Ruby on Rails:在哪里定义全局常量?.

在 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)

有关详细信息,请参阅选择

于 2013-08-02T19:30:55.043 回答
0

There are a couple of ways to do this. You can assign the constants to integers and they should be saved to the database as integers:

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

This is a bit ugly because Accounting is literally equal to zero. In Rails console:

Accounting == 0
=> true

However, this is probably the most straightforward way to meet your requirement and it looks like this is how your approached the problem with C.

于 2013-08-02T19:33:55.563 回答