2013-01-31 67 views
0

我見過很多關於如何使用FasterCSV,SmarterCSV或默認CSV庫導入CSV的示例。所有這些例子都假設csv是以某種格式存在的。將CSV列映射到Rails中的模型

我會有一個包含地址字段(街道,hsno,城市等)的固定模型,但我無法控制上傳的數據。

我正在尋找一種方法,在將數據加載到模型中之前,將CSV數據(通過標題名稱)映射到我的模型。

任何想法將不勝感激。

+1

我想你會更好地給一個CSV模板。如果您未在代碼和用戶輸入之間設置「標準」,則很難映射用戶發送的內容和您在應用中的內容。當其他人只有'full_name'時,某些用戶會有'first_name'和'last_name'字段。提供一個帶有預填充數據的CSV模板(或只是列名)是一個更好的主意,我認爲 – MrYoshiji

+1

我在@MrYoshiji上。你正在陷入瘋狂的陷阱。即使有明確的CSV格式,許多用戶也設法搞砸了。做到這一點是開放式的,會讓你的代碼暴露在瘋狂的變體中,直到時間結束纔會被追趕。您當然可以添加試圖猜測(不同級別的複雜性)數據的代碼,但是您仍然需要考慮無法猜測的格式。 – jdl

+0

我認爲它很混亂,但我覺得最終客戶能夠上傳文件更好,而不是確保格式符合我的要求。我確實計劃使用模型字段名稱的組合框,並讓用戶能夠將其標題映射到模型字段。難點在於不得不先讀取上傳的文件,以便我可以捕捉到標題。我現在看到的唯一可能性是使用javascript讀取前幾行並從此處取出。這將消除使用像Roo這樣的寶石來上傳xls文件的可能性。 – Rudi

回答

0

也許您可以使用模型屬性創建組合框,並讓用戶選擇列應匹配的屬性。

查看MailChimp import的「映射字段」部分的視覺示例。

(抱歉的廣告,但這是我能記得的一個例子)