Rails, пытаясь создать запись - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть несколько моделей, ученик, дневник и класс и записи в дневнике

Каждый ученик принадлежит к классу, у каждого ученика есть дневник для каждого класса.

Когда вы создаете ученика запись, вы выбираете оценку, я хочу иметь возможность создать дневник с именем и оценкой учащегося.

Модель дневника

class Diary < ApplicationRecord
    belongs_to :student
    belongs_to :user
    belongs_to :grade
end

Модель студента

class Student < ApplicationRecord

    belongs_to :user
    has_many :diaries, dependent: :destroy
    has_many :subjects, dependent: :destroy
    has_many :grades #confusing for me also... should be in one grade at a time?

    accepts_nested_attributes_for :diaries
    accepts_nested_attributes_for :subjects

    def subject_list=(subject_string)
        subject_name = subject_string.split(“,”).collect{ |s| s.strip.downcase }.uniq
       new_or_found_subjects = subject_names.collect { |name| Subject.find_or_create_by(name: name) }
       self.subjects = new_or_found_skills
    end
       
    def subject_list
       self.subjects.collect do |subject|
       subject.name
       end.join(“,”)
    end
end

Модель для класса

class Grade < ApplicationRecord
    has_many :subjects
    belongs_to :student
    belongs_to :diary
end

Страница студенческого шоу

 <div class="col-sm-7">
        <div class="card">
          <div class="card-body">

            <%= simple_form_for :diary, url: new_student_diary_path(@student) do |f| %>

<!-- I want to have a button here that creates a diary for the student, without manually entering any information
the information shoud be student_id, user_id and student.grade_id
 -->
            <%= f.submit "Create Diary", class: "btn btn-primary text-center" %>
            <%end%>
          </div>

Мой контроллер

  def create
    @student = Student.find(params[:student_id])
    @diary = @student.diaries.build(diary_params)
    @diary.user = current_user
        respond_to do |format|
          if @diary.save
            format.html { redirect_to @diary, notice: 'Diary was successfully created.' }
            format.json { render :show, status: :created, location: @diary }
          else
            format.html { render :new }
            format.json { render json: @diary.errors, status: :unprocessable_entity }
          end
        end
      end

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

1 Ответ

0 голосов
/ 21 февраля 2020

Согласно scenerio

1 ученик имеет 1 дневник

1 дневник имеет 1 класс

Итак,

s = Student.new
g = Grade.new
@d = Diary.new(s.id, g.id)

1 ученик имеет много оценок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...