我正在构建一个应用程序,用户可以从各种标准和问题中构建一个教程来教授标准,但是我不确定是否已经正确设置了所有内容或不。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
什么是'select_standards'?你可以发布模型定义吗? – vee
Select_standards是课程和标准之间的连接模型,用于保存用户的选择。但我想我解决了我的问题!我在问题模型中添加了“委托:课程::to =>:standard,:allow_nil => true”,现在我可以调用@ lesson.questions。非常感谢你的帮助。 :) –