2014-03-30 22 views
0
class Contact < ActiveRecord::Base 
    attr_accessor :email 
    def initialize(data) 
    data.each { |k, v| send("#{k}=", v) } 
    end 
end 

在軌控制檯無法保存記錄屬性數據庫

Contact.create!({"email"=>"[email protected]"}) 

保存到數據庫中的記錄已email如無

更新: 數據在傳遞是JSON 。我從JSON獲取所有數據並試圖將其保存到數據庫中。

+0

我不知道它的問題,但我總是用符號爲這些哈希電子郵件:正在傳遞「[email protected]」 – sonnyhe2002

+0

數據in是JSON數據 – Patrick

+0

你試過JSON數據上的'.to_hash'嗎? –

回答

1

你嘗試:

Contact.create(電子郵件: 「[email protected]」)

的電子郵件作爲:symbol並沒有大括號?

另外,你爲什麼要初始化你的模型?

+0

你是什麼意思,爲什麼我在模型中初始化?我從數據散列中提取屬性以使它們成爲實際屬性。我相信一旦我創建了一個實例變量和我想保存到數據庫的屬性,那麼我可以稍後訪問這些屬性。 – Patrick

+1

'Contact.new'初始化'Contact'的一個實例,你也可以通過它傳遞數據。 –

1

Mohamed El Mahallaway,我認爲你的代碼設置可以改進(否定初始化你的模型)。我想你會使用Rails的strong_params功能會更好:

#app/controllers/contacts_controller.rb 
def new 
    @contact = Contact.new 
end 

def create 
    @contact = Contact.new(contact_params) 
    @contact.email = "[email protected]" 
    @contact.save 
end 

private 

def contact_params 
    params.require(:contact).permit(:email, :other, :params) 
end 

我可能打錯了算盤使用Rails你的能力,但這是「導軌」的方式正確的數據保存到您的模型:)你可能有模型中的一個before_save方法使用email屬性,考慮到它是一個虛擬屬性