加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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 !,因此在执行此操作之前,请确保所有模型都是必需的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读