Ruby on rails Ruby没有从正确的表中选择

Ruby on rails Ruby没有从正确的表中选择,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个训练型号: class Workout < ActiveRecord::Base has_one :exercise belongs_to :session has_many :exercise_equipment end 在我的show中,我有@workout.exercise.name,它抛出一个SQLException: no such column: exercises.exercise_id: SELECT "exercises".* FROM "ex

我有一个
训练
型号:

class Workout < ActiveRecord::Base
  has_one :exercise

  belongs_to :session
  has_many :exercise_equipment

end
在我的
show
中,我有
@workout.exercise.name
,它抛出一个
SQLException:

no such column: exercises.exercise_id: SELECT  "exercises".* FROM "exercises" WHERE "exercises"."exercise_id" = ? LIMIT 1
尽管阅读了一些类似的帖子,但我确实无法理解为什么
有一个:exercise
行结果是
从exercises中选择exercises
这似乎没有任何意义,我假设因为我使用的是
Workout
对象,它会在
workouts
表中为我的

我试过了

has_one :exercise, :class_name => 'Workout', :foreign_key => 'exercise_id'
但是我得到了nil:NilClass的
未定义的方法'name'

add_foreign_key :workouts, :exercises
add_foreign_key :exercises, :workouts
不走运,巴克

那么,有人能向我解释一下Ruby/Rails认为它在这里做什么,以及我将来如何避免这个令人困惑的问题吗

表格

exercises
    id:integer
    name:text
    description:text
    created_at:text
    updated_at:text

workouts
    id:integer
    name:text
    exercise_id:integer
    session_id:integer
    created_at:text
    updated_at:text

如果外键的名称为entity\u id,则不必在Ruby中指定外键。如果要为一个练习指定N个训练,则只需在训练表中设置列Exercise\u id,然后指定模型:

class Workout < ActiveRecord::Base
  has_one :exercise
end

class Exercise < ActiveRecord::Base
  has_many :workouts
end
课堂训练
您只想在训练中更改此选项

has_one :exercise


属于_to
与带有外键的表一起使用。

我输入了错误的模型,我已经尝试过像这样的模型。它不起作用。您可以更新模型并将数据库架构添加到原始帖子中吗?如果您在训练中有一个或多个训练,则引用的关联上必须有一个训练id。关联模型将有一个
归属于:锻炼
一个锻炼独立于锻炼而存在。我应该能够进行“跳跃杰克”练习,而不必说是谁的训练参考了该练习,对吗?所以我仍然不知道为什么它要从运动表中选择运动id。一项运动有很多运动吗?还是仅仅一次?目前,我将每次锻炼只进行一次锻炼。稍后我会添加很多关系,但我觉得我应该先让它工作。这很有效,但我有几个问题。有两个人属于这样的关系可以吗?这是否意味着对于has_many和has_one,您不需要提供外键?是的,您可以-
所属的
实际上只是提供了一系列方法,希望外键位于对象上。您将拥有与数据库中的外键一样多的所属对象<代码>有一个是罕见的。
has_one :exercise
belongs_to :exercise