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

11 浏览
0 Comments

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

我对Ruby on Rails环境还不熟悉,所以我被一个可能很简单的问题困住了:我想定义一些与数字值对应的文本字符串/标签。这些值将存储在数据库中,然后在我的代码中使用,而不是使用数字值。

在C中,我会这样做:

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

...像这样使用:

    if (field_of_study == Accounting) ...


我希望能够在Rails的控制器/视图中做到这一点。我目前在视图中要显示项目时需要做这样的事情:

    
      <%= link_to user.name, user %>
      <% if user.studyField == 0 %>
        会计
      <% elsif user.studyField == 1 %>
        工程
      <% elsif user.studyField == 2 %>
        教育
      <% end %>
    

我还希望在form_for表单中的下拉菜单中使用文本字符串/标签,然后使用数字标识符保存它。我需要一个before_save方法来翻译这两者吗?还是有自动完成的方法?

0
0 Comments

问题的原因是需要将文本值对应到数字值。解决方法是使用数组来定义和使用文本值对应的数字值。以下是解决方法的具体步骤:

1. 首先,在配置文件的初始化器中定义常量,并将常量赋值为整数。这样,常量将以整数的形式保存到数据库中。

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

2. 这种方法看起来有点丑陋,因为"Accounting"字面上等于零。在Rails控制台中进行验证:

Accounting == 0
=> true

3. 然而,这可能是满足您需求最直接的方法,而且它看起来类似于您在C中解决问题的方式。

0
0 Comments

问题的出现原因是在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::ACCOUNTING`或`User::FIELDS[:accounting]`。如果要在表单中使用第二种方式,可以使用`select('user', 'study_field', User::FIELDS)`。

详细内容可以参考`select`的文档。

这就是我在Ruby中需要理解的内容。感谢帮助!

0