Ruby没有从正确的表中选择

时间:2015-12-24 00:42:01

标签: ruby-on-rails ruby activerecord

我有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

2 个答案:

答案 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的表一起使用。