rails 中有没有办法让一个模型可选地属于另一个模型?

Is there a way in rails to make a model optionally belong to another model?

我正在构建一个 rails 锻炼应用程序,它既有锻炼又有例程。我希望每个例程都由多个练习组成(has_many :exercises),但一个练习不一定属于一个例程。有办法吗?

阅读 guides 始终是一个好的开始。这从 Rails 5 开始有效。

belongs_to :routine, optional: true

您可能需要多对多关系,而不是一对多关系。

您似乎希望一个练习与任意数量的例程相关联,并且一个例程与一个或多个练习相关联。

你最终得到这样的结果:

# app/models/routine.rb
class Routine < ActiveRecord::Base
  has_and_belongs_to_many :exercises
end

# app/models/exercise.rb
class Exercise < ActiveRecord::Base
  has_and_belongs_to_many :routines
end

# db/migrate/1213123123123_create_exercises_routines_join_table.rb
class CreateExercisesRoutinesJoinTable < ActiveRecord::Migration
  def self.change
    create_table :exercises_routines, :id => false do |t|
      t.integer :exercise_id
      t.integer :routine_id
      t.index [:category_id, :routine_id]
    end
  end
end