ruby – 在单独的文件中使用DataMapper建模关联
发布时间:2020-12-17 03:51:56 所属栏目:百科 来源:网络整理
导读:我正在使用DataMapper并尝试使用模型Project和Task之间的关联.我将模型放在单独的文件project.rb和task.rb中.当我尝试将它们彼此关联时,我收到以下错误: 在项目中找不到parent_model Project for Task(NameError) 我收集这是由project.rb引起的,需要task.rb
我正在使用DataMapper并尝试使用模型Project和Task之间的关联.我将模型放在单独的文件project.rb和task.rb中.当我尝试将它们彼此关联时,我收到以下错误:
在项目中找不到parent_model Project for Task(NameError) 我收集这是由project.rb引起的,需要task.rb,反之亦然,因为如果我将它包含在其中一个文件中,则关联工作正常.这是代码: project.rb require 'dmconfig' require 'task' class Project include DataMapper::Resource property :id,Serial has n,:tasks end DataMapper.auto_upgrade! DataMapper.finalize task.rb require 'dmconfig' require 'project' class Task include DataMapper::Resource property :id,Serial belongs_to :project end DataMapper.auto_upgrade! DataMapper.finalize dmconfig.rb require 'rubygems' require 'dm-core' require 'dm-migrations' DataMapper::Logger.new($stdout,:debug) DataMapper.setup(:default,'sqlite://' + Dir.pwd + '/taskmanager.db') 如果我从其中一个文件中删除关联它工作正常,至少从一个方向: require 'dmconfig' class Project include DataMapper::Resource property :id,Serial end DataMapper.auto_upgrade! DataMapper.finalize 如果我希望关联从两个方向工作是唯一合理的解决方案,只是将两个类放在同一个文件中?或者有没有办法让他们分开并仍然管理它? 解决方法
您需要在需要所有模型后调用finalize,而不是在每个模型之后调用.最终确定的一件事是检查您的模型,确保所有相关模型都是必需的.在需要所有库文件之后,应用程序启动过程是执行此操作的理想位置.我建议像:
project.rb class Project include DataMapper::Resource property :id,:tasks end task.rb class Task include DataMapper::Resource property :id,Serial belongs_to :project end dmconfig.rb require 'dm-core' require 'dm-migrations' require 'project' require 'task' # note that at this point,all models are required! DataMapper::Logger.new($stdout,'sqlite://' + Dir.pwd + '/taskmanager.db') DataMapper.finalize DataMapper.auto_upgrade! 或者那种性质的东西.在您的应用程序中,您需要“dmconfig”并且必须设置所有设置. DataMapper推迟检查关系的远端(比如,任务模型中的项目),直到调用finalize或auto_upgrade !,因此在执行此操作之前,请确保所有模型都是必需的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |