ruby-on-rails - Rails ActiveRecord::Base before_save 覆盖 write_ 访问器以保存电话号码

标签 ruby-on-rails ruby

我有一个带有电话号码 text_field 标记的表单,我想将其信息作为纯整数保存到数据库中。我认为这会涉及一个 before_save ,它基本上会删除所有 () 等。

我在另一篇文章中发现,类似的内容可能会覆盖来自“电话”字段的值。

def original_number=(value)
  value.gsub!(/\D/, '') if num.is_a?(String)
  write_attribute(:original_number, num.to_i)
end

但是, =(value) 让我有点困惑。我该如何将其写为 before_save 参数?

即 before_save #######

定义######

结束

对于original_number=(value)我该如何写?

这是我的模型到目前为止的样子

# == Schema Information
#
# Table name: phones
#
#  id              :integer          not null, primary key
#  name            :string(255)
#  twilio_number   :integer
#  original_number :integer
#  user_id         :integer
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#

class Phone < ActiveRecord::Base

  attr_accessible :original_number, :user_id, :name, :twilio_number
  belongs_to :user

  validates :name, presence: true
  validates :twilio_number, presence: true
  validates :original_number, presence: true
  validates :user_id, presence: true

  default_scope order: 'phones.created_at DESC'

end

最佳答案

通过定义 def origin_number=(value) 方法,您将覆盖默认的访问器方法。所以你不需要在 before_save 上做任何事情。 虽然代码应该看起来像

def original_number=(value)
  num = value.to_s.gsub(/[^0-9+]/, "")
  write_attribute(:original_number, num.to_i)
end

关于ruby-on-rails - Rails ActiveRecord::Base before_save 覆盖 write_ 访问器以保存电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12744629/

相关文章:

ruby-on-rails - Ruby NET::HTTP 在主体之前读取 header (没有 HEAD 请求)?

ruby-on-rails - 我将如何对它进行排序和分组并用 rails 遍历它?

html - 我怎样才能使图标始终位于选择输入的右侧?

ruby - Chef 客户端无法读取机器元数据

ruby - lambda vs proc 或 Struct vs Class 区别的正确术语是什么?

ruby - 为变量赋值的 Ruby `if` block 的推荐缩进样式?

ruby-on-rails - 无法打开库 'libcurl' : libcurl: cannot open shared object file: No such file or directory

mysql - Rails MySQL 临时表错误

ruby-on-rails - 如何使用 rake 命令在命名空间的每个任务上运行一个函数

ruby-on-rails - 如何提供从 Rails 下载的文件?