我不确定标题是否清楚。我不太确定我要找的答案是什么。我一直在寻找,似乎找不到答案。
我想做的是:
我希望用户创建一个由x集、x重复和x类型组成的训练。
我知道我能做的例如;

create_table "workouts", :force => true do |t|
  t.string    "workout name"
  t.integer   "sets"
  t.integer   "reps"
  t.string    "type"
end

但在这种方法中,它只允许编写/训练一种类型的集合。
我希望能够添加多种类型的设置/锻炼。
例如;
workout name: monday morning
sets: 2 reps: 4 type: "bicep curl"
sets: 4 reps 23 type: "bench press"
etc..

如果我的解释太不清楚,或者我只是困惑,请随时指出。感谢大家的帮助。感谢收看!

最佳答案

您应该创建一个表workoutsworkout_details并将它们链接在一起:

create_table "workouts", :force => true do |t|
  t.string :name
end

create_table "workout_details", :force => true do |t|
  t.references :workout
  t.integer    :sets
  t.integer    :reps
  t.string     :type
end

你的模特会是这样的:
class Workout < ActiveRecord::Base
  has_many :workout_details
end

class WorkoutDetail < ActiveRecord::Base
  belongs_to :workout
end

如果您这样设置,您将创建几个训练详细信息:
bicep_curl = WorkoutDetail.new
bicep_curl.type = 'bicep curl'
bicep_curl.sets = 2
bicep_curl.reps = 4
bicep_curl.save

bench_press = WorkoutDetail.new
bench_press.type = 'bench press'
bench_press.sets = 4
bench_press.reps = 23
bench_press.save

并将其添加到训练中:
workout = Workout.new
workout.name = 'monday morning'
workout.workout_details << bicep_curl
workout.workout_details << bench_press
workout.save

要恢复训练,可以执行以下操作:
workout = Workout.where(:name => 'monday morning').first
puts "workout name: #{workout.name}"

workout.workout_details.each do |wd|
  puts "sets: #{wd.sets} reps: #{wd.reps} type: #{wd.type}"
end

输出:
workout name: monday morning
sets: 2 reps: 4 type: bicep curl
sets: 4 reps: 23 type: bench press

关于sql - “Flexible”(?)Rails数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17645577/

10-11 00:48