我有Workout
型号:
class Workout < ActiveRecord::Base
has_one :exercise
belongs_to :session
has_many :exercise_equipment
end
和Exercise
型号
class Exercise < ActiveRecord::Base
has_many :workouts
end
并在我的show
我@workout.exercise.name
投出SQLException:
no such column: exercises.exercise_id: SELECT "exercises".* FROM "exercises" WHERE "exercises"."exercise_id" = ? LIMIT 1
尽管阅读了一些类似的帖子,但我真的无法理解为什么has_one :exercise
行导致SELECT exercises FROM exercises
这似乎没有任何意义,我会认为这是因为我是使用Workout
对象,它将在workouts
表中检查我的
我已尝试
has_one :exercise, :class_name => 'Workout', :foreign_key => 'exercise_id'
然后我得到undefined method 'name' for nil:NilClass
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
答案 0 :(得分:1)
如果名称为 entity_id ,则不必在Ruby中指定外键。如果您想要进行一次锻炼的N锻炼,您只需在锻炼表中添加 exercise_id 列,然后指定您的模型:
class Workout < ActiveRecord::Base
has_one :exercise
end
class Exercise < ActiveRecord::Base
has_many :workouts
end
答案 1 :(得分:1)
您只想在锻炼
上更改此设置public function hookAction() {
set_order_paid();
$event->dispatch('pay.success');
}
要
has_one :exercise
belongs_to :exercise
与包含foreign_key的表一起使用。