1

我正在构建一个应用程序,用户可以在其中从各种标准和问题中构建课程以教授标准,但我不确定我是否正确设置了所有内容。

“新”页面允许用户使用下拉菜单进行排序,以通过课程控制器选择标准

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

选择标准后,用户将被重定向到显示每个选定标准的“编辑”页面,但这是我遇到问题的部分,我不确定我的模型设置是否正确。课程和标准之间存在 has_many through 关系以选择标准,课程和问题之间也存在 has_many through 关系以选择与每个标准关联的问题。

我试图列出与父标准下的标准相关的每个问题,我在“编辑”方法中尝试了@questions = @standards.questions,但调用了 ActiveRecord Relation 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

选择标准:

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

1 回答 1

0

该问题似乎与 Rails 无法为您的关联名称找出正确的类名有关。例如,你已经has_many :select_standards为你的 class指定了Selection,默认情况下 Rails 会搜索SelectStandardclass for association name :select_standards。在这种情况下,修复很容易,即将关联声明更改为:

has_many :selections

或添加class_name到关联为:

has_many :select_standards, class_name: 'Selection'

您需要确保对与实际ActiveRecord继承的类名称不匹配的任何和所有自定义关联名称都执行此操作。

于 2013-08-18T23:39:08.090 回答