无法将记录属性保存到数据库

时间:2014-03-30 01:48:31

标签: ruby-on-rails activerecord model persistence

class Contact < ActiveRecord::Base
  attr_accessor :email
  def initialize(data)
    data.each { |k, v| send("#{k}=", v) }
  end
end

在rails控制台

Contact.create!({"email"=>"foo@gmail.com"})

保存到数据库的记录email为nil

更新: 传入的数据是JSON。我从JSON获取所有数据并尝试将其保存到数据库中。

2 个答案:

答案 0 :(得分:1)

你有没有尝试过:

Contact.create!(电子邮件:“foo@gmail.com”)

电子邮件是:symbol而没有大括号?

另外,为什么要在模型中初始化?

答案 1 :(得分: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 = "foo@gmail.com"
    @contact.save
end

private

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

我可能错误地计算了你对Rails的能力,但这是&#34; Rails&#34;将正确数据保存到模型的方法:)您可以在模型中使用before_save方法来使用email属性,并将其视为虚拟属性