数据库
首页 > 数据库> > mysql – “.save”仅在数据库中插入空值

mysql – “.save”仅在数据库中插入空值

作者:互联网

我正在尝试为医院制作RoR应用程序,因此它有患者,医生,办公室等.

我遇到的问题是,在患者“注册”时,我无法将新患者保存在数据库中.实际上,尽管我已经检查过属性是否正常(它只是一个名称和个人ID),但一旦方法被删除,数据库中只会出现一个带有“< null>”的新行.而不是实际的属性值.这是方法:

def pat_create

  pName = params[:name].to_s
  id    = params[:pid].to_s.to_i

  pat = Patient.where(:pID => id).first
  if pat == nil
    pat = Patient.new(:name => pName, :pID =>id)
    pat.save
  end

end

此外,这是它构造的查询:

INSERT INTO `patients` (`created_at`, `name`, `pID`, `updated_at`) VALUES ('2013-05-20 02:04:28', NULL, NULL, '2013-05-20 02:04:28')

在其他视图收集以下形式的:name和:pid信息之后调用此方法:

<%= form_tag('/page/pat_create') do %> 
  <%= text_field_tag :name, nil%> 
  <%= text_field_tag :pid, nil%> 
  <%= button_tag(type: "submit", class: "btn btn-success") do %> 
    Register<i class="icon-white icon-plus"></i> 
  <%end%> 
<%end%>

毋庸置疑,pat.errors.empty?是的,pat.save也是如此.

知道为什么会这样吗?

这是患者模型:

class Patient < ActiveRecord::Base

  attr_accessible :name, :pID
  attr_accessor :name, :pID

  has_many :appointments
  validates_presence_of :name
  validates :name, :format => {:with=> /^[a-zA-Z\s\D]+$/}
  validates_presence_of :pID
  validates_numericality_of :pID
  validates_inclusion_of :pID, :in => 100000..9999999999   

end

解决方法:

删除类患者中的以下行:

attr_accessor :name, :pID

发生了什么是attr_accessor replaced两个数据库列属性:name和:pID(它们是自动生成的)有自己的属性,产生两个虚拟属性:name和:pID.

因此,正在设置和验证虚拟属性而不是相应的数据库属性,这导致数据库中没有错误但是空值.

标签:ruby-on-rails,mysql,ruby-on-rails-3-2
来源: https://codeday.me/bug/20191008/1872876.html