2013-08-02 54 views
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方法來翻譯這兩個,或者是他們的一個自動的方式嗎?

+0

如果我理解正確的,您可以設置一個Enumerable來做到這一點。 – 4444

+0

我完全理解如何來自C環境,這將是您的方法,但它非常非Ruby。在紅寶石中,你更可能使用像':accounting:engineering:education'這樣的符號。 – Daiku

+0

Robert Reynolds - 答案中的一個對你有幫助嗎?還是你還有其他問題?如果其中一個答案符合您的需求,您能否將其標記爲正確?謝謝。 – Powers

回答

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瞭解更多詳情。

+0

這就是我在Ruby中需要理解的東西。謝謝您的幫助! –

0

有幾種方法可以做到這一點。您可以分配常數爲整數,他們應該作爲整數被保存到數據庫中:

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

這是一個有點難看,因爲會計是字面上等於零。在Rails控制檯:

Accounting == 0 
=> true 

然而,這可能是最簡單的方式,以滿足您的需求,它看起來像這是你如何接近問題C.