在Rails 3 / ActiveRecord中建模的正确方法 - 复合外键

时间:2011-09-28 01:43:58

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一组与global_identificiation表有关系的位置,该表具有id,arc_id(object_id)和arc_type(object_type)(即复合外键)。我如何设置关联,以便在每次查找位置时急切地加载此全局信息?这样:

@l=Location.find(23)

@l['id']=23
@l['name']='some place'
@l['global_info']['id']=145
@l['global_info']['arc_id']=23
@l['global_info']['arc_type']='Location'

现在,为了保存,我只是做一个after_save回调,它是如何进入数据库但没有任何其他关联。

thx任何帮助

编辑:
也许这可以作为需要它的类的after_find来完成?

1 个答案:

答案 0 :(得分:0)

使用after_find,或者只是在模型中创建一个方法来调用,然后只需将数据作为参数传入。

或者更好地制作一个所有基于位置的类都可以包含的模块,然后这个模块可以定义各种基于位置的方法。

 module Locations
    def find_with_data(id)
        x = Location.find(id)
        x['id']=id
        x['name']='some place' #you could pass this in params
        x
    end
  end

 class Location < ActiveRecord::Base
    include Locations
 end

然后致电

 new_loc = Location.new
 new_loc.find_with_data(35)