Настройка контроллера с тремя моделями?

У меня есть три модели: Homework, Question и HomeworkAttempt.

homework.rb:

class Homework < ActiveRecord::Base
  belongs_to :group
  has_many :questions
  has_many :homework_attempts
end

question.rb:

class Question < ActiveRecord::Base
  belongs_to :homework
end

homework_attempt.rb:

class HomeworkAttempt < ActiveRecord::Base
  belongs_to :homework
  belongs_to :student
  has_many :answer_attempts
end

Я установил два контроллера, думая, что это будет лучший способ. Мой контроллер домашней работы пуст и существует просто для вложения homework_attempt. Мой контроллер попыток домашних заданий выглядит так:

class HomeworkAttemptsController < ApplicationController
  def new
    @group = Group.find(params[:group_id])
    @homework = Homework.find(params[:homework_id])
    @questions = @homework.questions
    @homework_attempt = HomeworkAttempt.new
    current_user.homework_attempts << @homework_attempt
    @title = @homework.name
  end
  ...
end

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

Спасибо!


person Community    schedule 15.06.2011    source источник
comment
В школе я получил только has one homework attempt :(   -  person Zabba    schedule 16.06.2011


Ответы (1)


Я не могу точно сказать, о чем вы спрашиваете, но у меня есть несколько идей, которые могут помочь вам начать работу:

В ваших отношениях кажется, что вы пытаетесь использовать модели, которые вы никогда не создавали. Например, belongs_to :group и has_many :answer_attempts оба подразумевают, что эти модели существуют, но вы нигде больше их не упомянули. Если вы хотите использовать эти отношения, вы должны создать эти модели.

Кроме того, кажется, что вы делаете слишком много работы в своем new действии. Четвертая строка — это обычно все, что нужно в таком действии, но трудно сказать без подробностей о том, чего именно вы пытаетесь достичь.

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

person Luke    schedule 15.06.2011
comment
у меня есть группы; Я просто пытался включить соответствующие модели. Попытки ответа были давным-давно, я думаю, что все это я получил из старого коммита git. Я собираюсь отредактировать свой вопрос, чтобы исправить это. - person ; 16.06.2011
comment
Если ваш вопрос заключается в том, какие столбцы базы данных вам понадобятся, чтобы эти отношения работали, для каждого belongs_to :blank потребуется целочисленное поле :blank_id в таблице базы данных этой модели. Например, для HomeworkAttempts нужны поля :student_id и :homework_id. - person Luke; 16.06.2011
comment
Верно; Я знаю это. Мой вопрос о контроллерах, которые не имеют для меня особого смысла - я не уверен, что считается «наиболее правильным». - person ; 16.06.2011
comment
По какой части контроллера вы ищете разъяснения? Предполагая, что ваши маршруты и формы настроены на совпадение, приведенный выше код должен работать, даже если он не самый идиоматический. - person Luke; 16.06.2011
comment
Хочу ли я сделать контроллер для каждой модели? Или я мог бы объединить некоторые... и это может быть не идиоматично, но это соответствует некоторым очень индивидуальным потребностям;). - person ; 17.06.2011
comment
Это действительно зависит от того, как вы хотите, чтобы приложение работало. Вам не нужен контроллер для каждой модели, если вы не планируете управлять ими по отдельности. Спланируйте, как вы хотите, чтобы данные вводились и представлялись, а затем извлеките из этого необходимые действия контроллера. - person Luke; 17.06.2011