Rails:创建具有多个belongs_to

时间:2015-10-21 15:13:23

标签: ruby-on-rails ruby-on-rails-4 relational-database relationship

我搜索了很长时间,却找不到问题。

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

enter image description here

1可能的解决方案是ResultUnit不属于User。但问题是,查询User.workouts.all.sets.all.resultunits.all

将花费多少性能。

我如何为User和Set创建一个新的ResultUnit?

2 个答案:

答案 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