2014-09-26 29 views
0

這個詞替換數字我想寫日誌到數據庫,並且我經常重複單詞(syslog,sms,voice,email),我需要改爲這些單詞插入數字(syslog - 1,短信 - 2,語音 - 3,電子郵件 - 4),以免阻塞基本重複單詞。然後選擇字數改爲數字Rails加入兩個表或用

不好意思,我問的問題不對。我有數據已保存,我需要選擇它到我的index.html.erb。查詢必須是這樣的:「選擇triggerid,嚴重性,狀態,types.name從日誌,類型WHERE logs.type_id = types.id;」在查詢後logs.type_id =(1,2,3,3,2,2,1),types.name =(email,sms,syslog,voice),types.id =(1,2,3,4,) myst be:types.name =(電子郵件,短信,系統日誌,系統日誌,短信,短信,電子郵件)。我怎樣才能使用activerecord這個結果?

回答

0

每個地址我不知道什麼字段名/表中的一個地址後,您的想要存儲這些數字,所以我打算把它稱爲'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') 
+0

非常感謝你,我會嘗試 – 2014-09-26 14:16:55

+0

對不起,我問這個問題錯了,我已經保存了數據,我需要在tomy index.html.erb中選擇它。 – 2014-09-29 06:51:27

+0

不好意思,我問錯了。我有數據已保存,我需要選擇它到我的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

0

你每個客戶端?:

Client.joins(:addresses)

或客戶信息?:

Adress.join(:client)

+0

'join'應該'joins' – 2014-09-26 11:16:53

+0

感謝,累;) – TomDunning 2014-09-26 11:18:51

+0

一般我想寫日誌數據庫和我經常重複的單詞(系統日誌,短信,語音,電子郵件), 我需要改爲這些字插入數字(系統日誌 - 1,短信 - 2,語音-3,電子郵件-4), ,以免堵塞基重複單詞。然後選擇單詞代替數字。 – 2014-09-26 11:34:26