1

Я создаю приложение, в котором пользователь может построить урок из ряда стандартов и вопросов для обучения стандартам, но я не совсем уверен, правильно ли я настроил все правильно или нет.Rails multiple has_many: через и отображение ассоциаций

«Новая» страница позволяет пользователю использовать выпадающее меню для перебирать, чтобы выбрать стандарты через Lesson контроллер

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 посредством взаимосвязи между уроками и вопросами, а также для выбора вопросов, связанных с каждым стандартом.

Я пытаюсь перечислить каждый из вопросов, связанных со стандартами под родительским стандартом, я попробовал @questions = @ standards.questions в методе «edit», но вызывается ошибка NoMethod с отношением ActiveRecord. Я также попробовал @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 не может определить правильные имена классов для ваших имен ассоциаций. Например, вы указали has_many :select_standards для своего класса Selection, по умолчанию Rails будет искать класс SelectStandard для названия ассоциации :select_standards. Исправление легко в этом случае, что либо изменить декларацию об ассоциации с:

has_many :selections 

или добавить class_name объединение как:

has_many :select_standards, class_name: 'Selection' 

Вы должны убедиться, что это делается для любого и все имена пользовательских ассоциаций, которые не соответствуют фактическим именам унаследованных классов .

+0

Это была простая ошибка на моем конце, но это сработало отлично! Большое вам спасибо за вашу помощь! –