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

这对我来说是一个简单的错误,但是这个工作也很完美!非常感谢你的帮助! –