2015-02-24 54 views
2

我有一個用戶有一個或多個電子郵件地址,我不想爲電子郵件創建一個新表。這個想法是將電子郵件地址存儲爲Array,但是如何在控制器和模型中實現? 這是控制器Rails陣列和Mysql

class UsersController < ApplicationController 
def update 
@user =User.find(params[:id]) 

if @user.update_attributes(user_params) 
    redirect_to :action => 'show', :id => @user 

是否有可能在更新過程中,以檢查電子郵件的參數已經存在或者一個新的,如果它是新添加到一個數組中? 我不知道我是否清楚自己,但是非常感謝您提供的任何答案或建議! 順便說一句,我正在使用MySQL,我無法切換到另一個!

回答

4

您可以將其存儲爲逗號分隔列表。當作爲檢索user.emails

,或者使用rails serialize來完成這項工作

例如,

class User < ActiveRecord::Base 
    serialize :emails, Array 
end 

將保持陣列格式。 您可以隨時驗證電子郵件是否存在於數組中。

但我的建議是有一個單獨的模型。未來可能會擁有新的功能,如分配主要和次要電子郵件,而不是。那麼這個設計就不會那麼有用了。

+0

P.S - 任何類類型都可以傳遞給serialize指令。 Array,Hash,JSON另一個主動記錄可能 – 2015-02-24 00:44:21

+0

非常感謝! 我實際上使用active_model_serializer將數據呈現爲Ember客戶端的Json。 你認爲我可以通過active_model_serializer做同樣的事嗎? 再次感謝您的回答! – Jack 2015-02-24 08:58:21

+0

從我從http://railscasts.com/episodes/409-active-model-serializers讀到的關於active_model_serializer的內容中,它似乎更像是一個表示性實用程序(將ActiveRecord轉換爲json並因此創建一個API)。但在這裏,我們的目標是以序列化的方式存儲對象。我認爲這不會達到目的。它是可以理解的想要使用一個修復所有:)在那裏! 012- P.S - rails serialize已經是rails的一部分,所以你不必覺得使用不需要的額外的寶石或東西。它在那裏讓我們的開發人員利用。 – 2015-02-24 19:28:03