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获取所有数据并尝试将其保存到数据库中。
答案 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
属性,并将其视为虚拟属性