定义并使用与数字值对应的文本值数组
定义并使用与数字值对应的文本值数组
我对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
方法来翻译这两者吗?还是有自动完成的方法?
问题的出现原因是在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中需要理解的内容。感谢帮助!