繁体   English   中英

回调before_save似乎不起作用

[英]callback before_save seems not working

在将记录保存到数据库之前,我需要执行方法名称,但是似乎不起作用

class Guest < ActiveRecord::Base
  before_save :name
  has_and_belongs_to_many :checkins
  validates_presence_of :FirstName
  validates_presence_of :LastName
  validates_format_of :FirstName, with: /^[A-Za-z\s]+$/
  validates_format_of :LastName, with: /^[A-Za-z\s]+$/

  def name
    self.FirstName.titleize  + " " + self.LastName.titleize  
  end
end

安慰

=> Guest(id: integer, FirstName: string, LastName: string, age: integer, sex: string, photo: string, address: text, mobile: integer, email: string, birthdate: date, created_at: datetime, updated_at: datetime) 
1.9.3-p547 :008 > f=Guest.new
 => #<Guest id: nil, FirstName: nil, LastName: nil, age: nil, sex: nil, photo: nil, address: nil, mobile: nil, email: nil, birthdate: nil, created_at: nil, updated_at: nil> 
1.9.3-p547 :009 > f.FirstName=" fernando "
 => " fernando " 
1.9.3-p547 :010 > f.LastName=" suarez"
 => " suarez" 
1.9.3-p547 :011 > f.save
 => true 
1.9.3-p547 :012 > Guest.last
 => #<Guest id: 9, FirstName: " fernando ", LastName: " suarez", age: nil, sex: nil, photo: nil, address: nil, mobile: nil, email: nil, birthdate: nil, created_at: "2015-04-26 00:16:38", updated_at: "2015-04-26 00:16:38"> 

你需要改变

self.FirstName.titleize  + " " + self.LastName.titleize

self.FirstName = self.FirstName.titleize
self.LastName  = self.LastName.titleize

说明:您实际上并没有进行任何更改,而是将这些值连接在一起。

但是可能您想对名称表示使用name方法。 因此,我建议一种新的验证方法。

它看起来像这样:

def titlelize_names
  self.FirstName = self.FirstName.titleize
  self.LastName  = self.LastName.titleize
end

当然,before_save必须调用:titlelize_names

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM