每個地址我不知道什麼字段名/表中的一個地址後,您的想要存儲這些數字,所以我打算把它稱爲'FIELD_NAME'和'TABLE'。在MySQL中保持它,你可以這樣做:
檢索:
SELECT TABLE.*, case FIELD_NAME WHEN 'syslog' THEN 1 WHEN 'sms' THEN 2 WHEN 'voice' THEN 3 WHEN 'email' THEN 4 ELSE null END as FIELD_ALIAS FROM TABLE
結果將有FIELD_NAME與int值的屬性,並FIELD_ALIAS與文字版的屬性。
插入(STR_VALUE是該領域的字符串版本):
INSERT INTO TABLE_NAME (FIELD_NAME) VALUES (case STR_VALUE WHEN 'syslog' THEN 1 WHEN 'sms' THEN 2 WHEN 'voice' THEN 3 WHEN 'email' THEN 4 ELSE null END)
我認爲一個更好的選擇,雖然將卸載給你的模型。爲簡單起見,我將把你的整數版本稱爲'int_value'。
class Address < ActiveRecord::Base
before_save :convert_int_value
def str_value
case self.int_value
WHEN 1 THEN 'syslog'
WHEN 2 THEN 'sms'
WHEN 3 THEN 'voice'
WHEN 4 THEN 'email'
end
protected
def convert_int_value
return nil unless int_value.is_a?(String)
self.int_value = case self.int_value
WHEN 'syslog' THEN 1
WHEN 'sms' THEN 2
WHEN 'voice' THEN 3
WHEN 'email' THEN 4
end
end
無論何時您想要int版本,只需在您的模型上調用int_value即可。如果你想要字符串調用str_value。另外,您可以將字符串版本存儲在int_value中,並且在記錄保存之前,它會將其轉換爲您的值。這樣你所有必須傳遞的是一個整數。
根據註釋更新
如果您關聯的設置是否正確(登錄belongs_to的:類型)
Log.includes(:type).each do |l|
l.status
l.type.name #> email, sms, or syslog
end
我意識到事後有另一種解決方案,以及,我覺得這是更多你在找什麼
Log.joins(:type).select('triggerid, severity, status, types.name')
alt1
Log.joins(:type).select('log.*, types.name')
ALT2
Log.joins('JOINS types ON types.id = logs.type_id').select('log.*, types.name')
非常感謝你,我會嘗試 – 2014-09-26 14:16:55
對不起,我問這個問題錯了,我已經保存了數據,我需要在tomy index.html.erb中選擇它。 – 2014-09-29 06:51:27
不好意思,我問錯了。我有數據已保存,我需要選擇它到我的index.html.erb。 查詢必須是這樣的:「選擇triggerid,嚴重性,狀態,types.name從日誌,類型WHERE logs.type_id = types.id;」 (1,2,3,2,2,1),types.name =(email,sms,syslog,voice),types.id =(1,2,3,4) 在查詢myst之後:type.name =(電子郵件,短信,系統日誌,系統日誌,短信,短信,電子郵件)。 我如何使用activerecord來獲得這個結果? – 2014-09-29 07:17:18