2013-07-15 59 views
1

我不確定標題是否清晰。我不太確定我要找的答案是什麼。我一直在搜索和搜索,似乎無法找到答案。「靈活」(?)Rails數據庫

這就是我想做的事:

我想用戶創建包含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.. 

如果我的解釋太不清楚,或者我可能只是困惑,請隨時指出。所有的幫助表示讚賞。感謝您的觀看!

+1

根據我的理解,你想多態關聯的http:// guides.rubyonrails.org/association_basics.html#polymorphic-associations? – vee

+0

@vinodadhikary,這裏不需要多態關聯。一個簡單的'has_many'和'belongs_to'就足夠了。 – Mischa

回答

2

你應該創建一個表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 

和a他們dd來鍛鍊:

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 
+0

非常感謝你的解釋和答案! :) –

+0

不客氣。我很高興能夠提供幫助。 – Mischa