我搜索了很长时间,却找不到问题。
user.erb
has_many :workouts
has_many :result_units
workout.erb
belongs_to :user
has_many :sets
set.erb
belongs_to :workout
has_one :result_unit
result_unit.erb
belongs_to :user
belongs_to :set
1可能的解决方案是ResultUnit不属于User。但问题是,查询User.workouts.all.sets.all.resultunits.all
将花费多少性能。我如何为User和Set创建一个新的ResultUnit?
答案 0 :(得分:3)
这是使用has_many:through association。
的情况http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
运行User.workouts.all.sets.all.resultunits.all
将导致执行大量查询。但是,has_many:通过只执行一个查询,并允许数据库优化表之间的连接。
class User < ActiveRecord::Base
has_many :workouts
has_many :sets, through: :workouts
has_many :result_units, through: :sets
end
答案 1 :(得分:0)
好的,我没有100%理解你的问题..但我会捅它,如果不对,可以随意投票。
class User
has_many :workouts
has_many :result_units
has_many :sets, through: :workouts
# User.first.workouts
# User.first.result_units
# User.first.sets
end
class Workout
belongs_to :user
has_many :sets
# Workout.first.user
# Workout.first.sets
end
class ResultUnit
belongs_to :user
belongs_to :set
# ResultUnit.first.user
# ResultUnit.first.set
end
class Sets
belongs_to :workout
has_one :result_unit
# Set.first.workout
# Set.first.result_unit
end