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