如何使用ActiveRecord回调在保存前分配字段值?

如何使用ActiveRecord回调在保存前分配字段值?,activerecord,callback,ruby-on-rails-3,mongoid,Activerecord,Callback,Ruby On Rails 3,Mongoid,我想知道如何使用回调为数据库字段赋值,这些字段是在虚拟属性字段之外处理的。示例: field :houseno, :type => String field :street, :type => String attr_accessor :address 我的尝试似乎没有成功。以下是我所拥有的: before_validation :assign_fields def assign_fields if @address @houseno

我想知道如何使用回调为数据库字段赋值,这些字段是在虚拟属性字段之外处理的。示例:

  field :houseno, :type => String
  field :street, :type => String

  attr_accessor :address
我的尝试似乎没有成功。以下是我所拥有的:

  before_validation :assign_fields


  def assign_fields
    if @address
      @houseno = @address.match(/^(\d+-?(\d+)?)\W*(.*)/)[1]
      @street = @address.match(/^(\d+-?(\d+)?)\W*(.*)/)[3]
    end
  end
我一直在犯这样的错误:

建筑物的未定义方法“房屋编号”:0x000010488F108

您是否尝试过:

write_属性(:houseno)=@address.match(/^(\d+-?(\d+))\W*(.*)/)[1]


self.houseno=@address.match(/^(\d+-?(\d+))\W*(.*)/)[1]

我没有尝试第一种方法,但第二种方法有效。谢谢