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
我正在构建一个 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