2

電話番号用の text_field タグを含むフォームがあり、その情報を純粋な整数としてデータベースに保存したいと考えています。これには、基本的にすべての () などを削除する before_save が含まれます。

別の投稿で、このようなものが「電話」フィールドからの値を上書きする可能性があることを発見しました。

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

しかし、 =(値) は私を少し混乱させています。それを 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
4

2 に答える 2

3

def original_number=(value) メソッドを定義することで、デフォルトのアクセサ メソッドをオーバーライドしています。そのため、before_save で何もする必要はありません。コードは次のようになりますが

def original_number=(value)
  num = value.to_s.gsub(/[^0-9+]/, "")
  write_attribute(:original_number, num.to_i)
end
于 2012-10-05T11:03:24.590 に答える
2

これを試して

before_save :set_phone_number,
def set_phone_number
 self.original_number= original_number.gsub(/\D/, '') if original_number.is_a?(String)
 self.original_number =  self.original_number.to_i
end

ゲッターとセッターのメソッドについてもっと読むhttp://www.rubyist.net/~slagell/ruby/accessors.html、Rubyセッターとゲッターのメソッドを学び/理解しようとしています

于 2012-10-05T10:56:24.640 に答える