1

我正在構建一個應用程序,用戶可以從各種標準和問題中構建一個教程來教授標準,但是我不確定是否已經正確設置了所有內容或不。Rails multiple has_many:通過並顯示關聯

「新」頁面,用戶可以使用下拉菜單來排序穿過課控制器

def new 
@search = Standard.search(params[:q]) 
@standards = @search.result 
@lesson = Lesson.new 
end 

def create 
@lesson = current_user.selects.build(params[:lesson]) 

    if @lesson.save 
    redirect_to edit_lesson_path(@lesson) 
    else 
    render :action => 'new' 
end 
end 

def edit 
@lesson = Lesson.find(params[:id]) 
@standards = @lesson.standards 
end 

選擇標準,一旦標準被選擇,用戶會被重定向到「編輯」該頁面顯示了每個選定的標準,但這是我遇到麻煩的部分,我不確定我的模型是否設置正確。通過課程和標準之間的關係來選擇標準,並且通過課程和問題之間的關係來確定問題以及選擇與每個標準相關的問題。

我想列出每個與父標準下的標準相關的問題,我已經在'edit'方法中嘗試了@questions = @ standards.questions,但是調用了ActiveRecord的關係NoMethod錯誤。我也在控制器中嘗試了@questions = Question.where(:standard_id => @standards),但該頁面列出了每個標準下所有選定標準的所有問題。

我的教訓型號:

class Lesson < ActiveRecord::Base 
attr_accessible :user_id, :name, :grade_id, :text_id, :date, :subject_id, :question_ids 

has_many :select_standards 
has_many :standards, through: :select_standards 

has_many :select_questions 
has_many :questions, through: :select_questions 
end 

標準模型:

class Standard < ActiveRecord::Base 
attr_accessible :content, :grade_id, :subject_id 
belongs_to :subject 
belongs_to :grade 
has_many :questions 
end 

問題型號:

class Question < ActiveRecord::Base 
attr_accessible :content, :standard_id 
belongs_to :standard 
has_many :select_questions 
has_many :lessons, through: :select_questions 
end 

Select_standards:

class Selection < ActiveRecord::Base 
attr_accessible :lesson_id, :standard_id 
belongs_to :lesson 
belongs_to :standard 
end 
+0

什麼是'select_standards'?你可以發佈模型定義嗎? – vee

+0

Select_standards是課程和標準之間的連接模型,用於保存用戶的選擇。但我想我解決了我的問題!我在問題模型中添加了「委託:課程::to =>:standard,:allow_nil => true」,現在我可以調用@ lesson.questions。非常感謝你的幫助。 :) –

回答

0

這個問題似乎與Rails無法爲您的關聯名稱找出適當的類名稱有關。例如,您已爲您的類Selection指定has_many :select_standards,默認情況下,Rails將搜索SelectStandard類,關聯名稱爲:select_standards。解決方法是很容易在這種情況下,這是要麼更改關聯聲明:

has_many :selections 

或添加class_name結社爲:

has_many :select_standards, class_name: 'Selection' 

你需要確保這是任何做以及與實際的ActiveRecord繼承的類名稱不匹配的所有自定義關聯名稱。

+0

這對我來說是一個簡單的錯誤,但是這個工作也很完美!非常感謝你的幫助! –