在rails中为模型创建添加钩子

时间:2011-01-19 13:03:50

标签: ruby-on-rails activerecord attributes

我有一个模型类Person,我使用:

创建它们的实例
person = Person.create!

现在我想说这个人出生在美国加利福尼亚州,但是这种特殊的方式:

person = Person.create!({:name => "Matt", :born => "USCA"})

这意味着有两个字符用于标识国家/地区,另外两个字符用于标识状态。 但我不想将字符串存储在数据库中,我希望以结构化的方式存储,如:

|名称|国家|国家|
|马特|美国|加利福尼亚州|

我在哪里可以解析字符串以根据它来分配国家和州?模型中的哪种方法?

提前致谢

3 个答案:

答案 0 :(得分:4)

类似的东西:

before_save :parse_country_code

def parse_country_code
  if born_changed?
    self.state = ...
    self.country = ...
  end
  true # avoid cancelling the callback chain
end

您可能还会发现ActiveRecord::Aggregations::ClassMethods有用。有了它,您可以将解析和其他逻辑合并到另一个类。

答案 1 :(得分:1)

您可以使用before_save回调 - 类似这样的内容:

attr_accessible :born

before_save :parse_location

def parse_location
    # parsing here…
end

答案 2 :(得分:1)

查看ActiveRecord Callbacks模块