Tôi đang cố gắng giải quyết các mối quan hệ của mình nhưng tôi gặp sự cố khi sử dụng các liên kết.mô hình đường ray has_many: thông qua các hiệp hội
Vì vậy, tôi có ba mô hình Workout
, Exercise
và WorkoutExercise
. Một tập luyện nên có nhiều bài tập và bài tập nên có tập luyện khác nhau do đó tôi đã viết:
class Workout < ActiveRecord::Base
has_many :workout_exercises
has_many :exercises, :through => :workout_exercises
end
class Exercise < ActiveRecord::Base
has_many :workout_exercises
has_many :workouts, :through => :workout_exercises
end
class WorkoutExercise < ActiveRecord::Base
belongs_to :exercise
belongs_to :workout
end
Tôi đang chạy một số xét nghiệm nhưng các xét nghiệm không đi qua một lần tôi có thể tạo một tập thể dục, tập thể dục và sau đó tham gia cùng họ trong workout_exercise lớp học. Nó sẽ không cho phép tôi truy cập vào các bài tập trong tập luyện như thế này:
Workout.create
Exercise.create
WorkoutExercise.create(:workout => Workout.first, :exercise => Exercise.first)
work = Workout.first
work.exercises.count #This line causes the error: undefined method exercises
bảng cơ sở dữ liệu của tôi trông như thế này:
class CreateWorkouts < ActiveRecord::Migration
def change
create_table :workouts do |t|
t.string :title
t.text :description
t.float :score
t.timestamps
end
end
end
class CreateExercises < ActiveRecord::Migration
def change
create_table :exercises do |t|
t.string :title
t.text :description
t.float :value
t.timestamps
end
end
end
class CreateWorkoutExercises < ActiveRecord::Migration
def change
create_table :workout_exercises do |t|
t.timestamps
end
end
end
Khi tôi chạy thử nghiệm nó nói exercises
là undefined. Có ai có ý tưởng nào?
Bạn đã chạy di chuyển của mình chưa? Vui lòng cho chúng tôi biết 3 bảng của bạn. Và tôi nghĩ bạn nên bỏ qua đề nghị của Yanhao một lúc. Mã của bạn có vẻ chính xác, do đó bạn không phải thay đổi nó ngay bây giờ. Bạn đang thiếu cái gì khác. – Ashitaka
@Ashitaka Tôi đã thêm các bảng ở trên, nó có liên quan gì đến bảng CreateWorkoutExercises không? Đây là lần đầu tiên tôi sử dụng habtm. – trev9065
Ok, vậy là xong. Bạn đã bỏ lỡ các id đã thiết lập kết nối giữa hai bảng. Có thể bạn sẽ muốn tạo lại di chuyển của mình ngay bây giờ. Tôi nghĩ rằng 'rake db: reset' sẽ thực hiện công việc (nó sẽ xóa tất cả các bản ghi của bạn). – Ashitaka