从Datamapper开始,关联问题

2023-12-27

我刚刚深入研究 Datamapper(和 Sinatra)并有一个关于关联的问题。以下是我拥有的一些型号。这就是我想要实现的。我在锻炼项目和锻炼方面遇到问题。锻炼将单独管理,但锻炼项目有与每一行关联的单个锻炼。

  1. 锻炼 - 只是类型的列表 锻炼(跑步、举重、仰卧起坐等)
  2. 选定的锻炼 - 这个 是一组锻炼的名称, 以及用户的注释和 教练。它有N个集合 锻炼项目
  3. 锻炼项目 - 这需要锻炼和锻炼组中的多次重复。

    
    
    class Workout
      include DataMapper::Resource
      property :id,     Serial  #PK id
      property :name,   String, :length=>50,:required=>true  # workout name
      property :description, String, :length=>255  #workout description
    end
    
    
    class Selectedworkout
      include DataMapper::Resource
      property :id,  Serial
      property :name, String, :length=>50, :required=>true
      property :workout_time, String, :length=>20
      property :user_notes, String, :length=>255
      property :coach_notes, String, :length=>255
      has n, :workoutitems
    end
    
    class Workoutitem
      include DataMapper::Resource
      property :id, Serial
      property :reps, String, :length=>50, :required=>true
      belongs_to :selectedworkout
    end
      

在我回答之前,我要指出,典型的 ruby​​ 约定(与您稍后将看到的 DataMapper 相关)是具有像 SelectedWorkout 和 WorkoutItem 这样的类名称,而不是 Selectedworkout 和 Workoutitems。 DataMapper 会根据类名自动命名您的关系,因此遵循约定很有用。如果令人困惑,我们深表歉意,但出于答案的目的,我假设您可以重命名模型:

鉴于您的 Workout 模型本质上是 WorkoutItem 中数据的标准化集合,我建议WorkoutItem.belongs_to(:workout)(顺便说一下,这是一个你可以从 IRB 运行的命令,它工作得很好,或者你可以坚持belongs_to :workout当然是在模型类中)。

看起来 SelectedWorkout 是您进入数据的主要界面,所以我认为您会做类似这样的事情@user.selected_workouts.first.workout_items(对于第一个选择的锻炼项目)等等。

顺便说一句,如果设置了以下关系,您可以更进一步,使用 WorkoutItem 作为 Workout 和 SelectedWorkout 之间的连接模型:

WorkoutItem.belongs_to(:workout)

WorkoutItem.belongs_to(:selected_workout)

SelectedWorkout.has(Infinity, :workout_items) # n == Infinity inside a Model

一旦建立了先前的关系,您就可以说:

SelectedWorkout.has(Infinity, :workouts, :through => :workout_items)

同样,您也可以通过类似的方式设置“有很多”的另一边:

Workout.has(Infinity, :workout_items)

Workout.has(Infinity, :selected_workouts, :through => :workout_items

现在,您可以做一些很酷的事情,例如@selected_workout.workouts.map{ |w| w.name }。或者,如果您想查找包含特定锻炼的所有选定锻炼,您可以说@workout.selected_workouts.

或者您可以通过 DataMapper 的查询语法做更多令人兴奋的事情,如下所示:

@workouts_that_dont_require_gear = SelectedWorkouts.all("workouts.name" => ["Situps", "Pullups", "Pushups"])

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从Datamapper开始,关联问题 的相关文章

  • 处理中渲染极地带面体时出现问题

    我最近一直在研究 Zohedrons 和Rob Bell http zomadic com 做出了美丽的 我玩了免费的极地带面体 Sketchup 插件 http zomebuilder com 并考虑使用几何图形加工 http proce
  • Rails-自定义删除前确认对话框的视图

    要删除 Rails 中的记录 我使用此代码 result of which I get dialog box like this But I wants this dialog box to look like this 有没有办法自定义确
  • Ruby 对象打印为指针

    我正在尝试创建一个类 它有一个带有单个参数的构造函数 当我创建该对象的新实例时 它返回一个指针 class Adder def initialize my num my num my num end end y Adder new 12 p
  • ruby 中的数组切片返回不同的结果 - nil 与空数组

    我对以下事实感到困惑 如果对数组进行切片length 它返回一个空数组 但长度大于该值时 它返回nil 这是什么原因呢 例如 arr 1 2 3 4 5 这样做 在哪里y gt arr length and x是任意正整数 返回nil ar
  • 在轮询器内异步运行代码

    在我的 ruby 脚本中 我使用 celluloid zmq gem 我尝试在轮询器内异步运行评估响应 使用 async evaluate response socket read multipart 但是 如果我从循环中删除睡眠 不知何故
  • 如何将命令行参数传递给 rake 任务

    我有一个 rake 任务需要将一个值插入到多个数据库中 我想从命令行或从another耙任务 我怎样才能做到这一点 您可以通过向任务调用添加符号参数来指定 rake 中的形式参数 例如 require rake task my task a
  • 为什么 Chrome Devtools 中的 Ruby 文件 (.erb) 无法使用语法高亮显示?

    根据本新闻稿 Chrome 开发者工具可以对多种语言进行语法高亮显示 包括 erb 文件 https plus google com GoogleChromeDevelopers posts MnikfMyJ14X https plus g
  • 在 Ruby 中处理 Zip 文件 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在ruby中仅在内存中创建zip文件 https stackoverflow com questions 11532502 how to create zip file only in memor
  • 如何从 Ruby 2.0 中的字符串数组获取值

    我有这个字符串数组 array nike air nike steam nike softy nike strength smooth sleeper adidas air addidas jogar adidas softy adidas
  • 从架构中删除表 - Rails

    我想删除架构中的一个表 我在第一次启动项目时创建了数据库并希望删除该表 这样做的最佳方法是什么 I tried rails g migration drop table installs但这只会创建一个空迁移 Schema create t
  • 不同金额的 Stripe 订阅计划

    我正在为一家慈善机构制作一份捐赠表格 他们要求提供每月捐赠计划 用户可以选择他们想要捐赠的任何金额 我知道我可以制定个人计划 即 如果他们说每月捐款 5 美元 10 美元或 20 美元 我可以制定三个不同的计划并向用户订阅它们 有没有办法避
  • Guard 不会加载 WDM

    我正在学习 Michael Hartl 的 Rails 教程 到目前为止该教程非常出色 我在高级设置一章中 他以有利于 TDD 的方式配置 Rails 环境 我安装了 Guard 并且通过运行我在 spec 文件夹中的测试 它一直正常运行
  • 尝试使用 Rails 和 PostgreSQL 生成模型时,命令挂起且没有错误

    使用该命令时 rails generate model Event name string 什么也没发生 我必须按 CTRL c 我使用的版本是 红宝石 2 1 1p76 导轨4 1 0 PostgreSQL 9 3 4 Mac OS X
  • 当 config.cache_classes = true 时缺少方法

    我有两个名为 Scope 和 ScopeItem 的 ActiveRecord 模型 具有 has many 关系 class Scope lt ActiveRecord Base has many scope items end clas
  • 验证 ActionCable 连接

    我发现了一个很棒的 ActionCable gem 它是 SPA 的一个很好的解决方案 我只想发送html css and js资产 所有其他连接将通过ActionCable 交换字符串或者整数并不难 但是如何通过ActionCable登录
  • 如何将两个不同的哈希数组中的值添加在一起?

    我有两个哈希数组 哈希值的键不同 player scores1 first name gt Bruce score gt 43 time gt 50 first name gt Clark score gt 45 minutes gt 20
  • Ruby 未绑定方法:是否可以强制绑定到其他类的实例?

    我想知道我是否可以强迫这种情况发生 class A def bomb bomb end end class B end bomb A instance method bomb b B new bomb bind b 目前它抛出错误 Type
  • 获取块参数个数

    我需要获取给定块所采用的参数数量 例如 foobar 1 2 3 a b c def foobar x y z block need to obtain number of arguments in block which would be
  • 如何使 Rails 3 资源预编译速度更快?

    我有一个正在运行的 Rails 3 2 1 应用程序 我正在通过 Capistrano 进行部署deploy assets它运行deploy assets precompile task 一切工作都很好 除了编译本身非常慢 我没有那么多 C
  • Rails 中的 PDF 导出

    我需要将包含一些图表的 HTML 页面导出为 PDF 有哪些好的 gem 可以做到这一点 PDFKit http railscasts com episodes 220 pdfkit http railscasts com episodes

随机推荐