我是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
方法来翻译这两种方法,还是他们自动执行此方法?
答案 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::ACCOUNTING
或User::FIELDS[:accounting]
的任何地方使用。要在表单中使用第二个版本,可以使用
select('user', 'study_field', User::FIELDS)
有关详细信息,请参阅select。
答案 1 :(得分:0)
有几种方法可以做到这一点。您可以将常量分配给整数,并将它们作为整数保存到数据库中:
# config/initializers/constants.rb
Accounting = 0
Engineering = 1
这有点难看,因为会计在字面上等于零。在Rails控制台中:
Accounting == 0
=> true
但是,这可能是满足您要求的最直接方式,看起来这就是您使用C解决问题的方式。