2009-11-23 35 views
31

Tôi khá mới đối với Ruby on Rails và tôi rõ ràng có vấn đề liên quan đến bản ghi hoạt động nhưng tôi không thể tự giải quyết vấn đề này.Không thể tìm thấy sự cố liên kết trong Rails

Với ba lớp mô hình với các hiệp hội của họ:

# application_form.rb 
class ApplicationForm < ActiveRecord::Base 
    has_many :questions, :through => :form_questions 
end 

# question.rb 
class Question < ActiveRecord::Base 
    belongs_to :section 
    has_many :application_forms, :through => :form_questions 
end 

# form_question.rb 
class FormQuestion < ActiveRecord::Base 
    belongs_to :question 
    belongs_to :application_form 
    belongs_to :question_type 
    has_many :answers, :through => :form_question_answers 
end 

Nhưng khi tôi thực hiện bộ điều khiển để thêm câu hỏi với các hình thức ứng dụng, tôi nhận được lỗi:

ActiveRecord::HasManyThroughAssociationNotFoundError in Application_forms#show 

Showing app/views/application_forms/show.html.erb where line #9 raised: 

Could not find the association :form_questions in model ApplicationForm 

bất cứ ai có thể chỉ ra những gì Tôi đang làm sai?

Trả lời

57

Trong lớp ApplicationForm, bạn cần phải xác định mối quan hệ của ApplicationForms với 'form_questions'. Nó chưa biết về nó. Bất cứ nơi nào bạn sử dụng :through, bạn cần phải cho nó biết nơi để tìm bản ghi đó trước tiên. Cùng một vấn đề với các lớp khác của bạn.

Vì vậy

# application_form.rb 
class ApplicationForm < ActiveRecord::Base 
    has_many :form_questions 
    has_many :questions, :through => :form_questions 
end 

# question.rb 
class Question < ActiveRecord::Base 
    belongs_to :section 
    has_many :form_questions 
    has_many :application_forms, :through => :form_questions 
end 

# form_question.rb 
class FormQuestion < ActiveRecord::Base 
    belongs_to :question 
    belongs_to :application_form 
    belongs_to :question_type 
    has_many :form_questions_answers 
    has_many :answers, :through => :form_question_answers 
end 

Đó là giả định đó là cách bạn có nó thiết lập.

+1

Tôi đã làm điều này một nghìn lần và ngay cả khi nhìn chằm chằm vào các mô hình hmt làm việc khác của tôi, không thể nhìn thấy tôi đã mất tích has_many khác ... lol ... – Danny

11

Bạn cần phải bao gồm một

has_many :form_question_answers 

Trong mô hình FormQuestion của bạn. The: thông qua dự kiến ​​một bảng đã được khai báo trong mô hình.

Cùng đi cho các mô hình khác của bạn - bạn không thể cung cấp một liên kết has_many :through đến khi bạn đã đầu tiên tuyên bố has_many

# application_form.rb 
class ApplicationForm < ActiveRecord::Base 
    has_many :form_questions 
    has_many :questions, :through => :form_questions 
end 

# question.rb 
class Question < ActiveRecord::Base 
    belongs_to :section 
    has_many :form_questions 
    has_many :application_forms, :through => :form_questions 
end 

# form_question.rb 
class FormQuestion < ActiveRecord::Base 
    belongs_to :question 
    belongs_to :application_form 
    belongs_to :question_type 
    has_many :form_question_answers 
    has_many :answers, :through => :form_question_answers 
end 

Dường như giản đồ của bạn có thể là một chút rung rinh, nhưng điểm mấu chốt là bạn luôn cần thêm has_many cho bảng kết nối trước, sau đó thêm thông qua.

+0

Cảm ơn bạn rất nhiều vì điều này - tất nhiên, bạn sẽ nhận ra câu trả lời của mình. Tuy nhiên, "có thể chỉ có một" vì vậy tôi đã trao giải đáp cho người kia chỉ vì anh ta trả lời trước. Tôi đã bỏ phiếu cho câu trả lời của bạn mặc dù, do đó, có ít nhất một giải khuyến khích để có câu trả lời đúng. Cảm ơn một tấn. :) – Ash

Các vấn đề liên quan