我不确定标题是否清楚。我不太确定我正在寻找什么样的答案。我一直在搜索和搜索,似乎找不到答案。
这就是我想要做的事情:
我希望用户创建一个由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..
如果我的解释太不清楚,或者我可能只是困惑,请随时指出。所有帮助表示赞赏。感谢您的观看!
答案 0 :(得分:2)
您应该创建一个表workouts
和workout_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