10일(1): 마스터(DB에 정보를 입력하여 페이지로 내보내기
사용 환경
호스트 운영 체제: Windows10 홈 페이지
가상 환경 운영 체제: Ubuntu Bento/Bionic
Ruby:2.51
Rails:5.2.2
테이블 연관도
마지막 프로세스
마지막 프로세스
이번 절차.
실제 단계
Students show 페이지의 이전 상태
학생 데이터와 연결될 때
student1 = Student.first
student1.clubs << Club.first
student1.save
데이터 입력
학생의 동아리 활동 정보
id1에서 id100까지의 학생들을 0~4개 동아리 활동에 참가시키다(선택항은 13부).(1..100).each do |i|
student = Student.find(i)
1.upto(rand(0..4)) do
student.clubs << Club.find(rand(1..13))
student.save
end
end
학생 시험 결과 정보
id100까지 9과목 시험을 보게 하세요.
또 점수는 0점에서 과목별로 설정된 최대점까지 무작위
(1..100).each do |i|
student = Student.find(i)
1.upto(9) do |num|
sub = Subject.find(num)
exam_res = ExamResult.new
exam_res.name = "試験#{num}"
exam_res.score = rand(1..sub.max_score)
exam_res.subject = sub
student.exam_results << exam_res
student.save
end
end
Students의 index 페이지 태그 변경
app/models/studetns.rbenum gender: { male: 0 ,female: 1}
enum age: {"teen": 0, "twenty": 1}
app/views/_form.html.erb<div class="field">
<%= form.label :gender %>
<%= form.radio_button :gender, 'male' %>男性
<%= form.radio_button :gender, 'female' %>女性
</div>
<div class="field">
<%= form.label :age %>
<%= form.radio_button :age, '20代' %>20代
<%= form.radio_button :age, '30代' %>30代
</div>
출력을 고려하다
student1 = Student.first
student1.clubs << Club.first
student1.save
(1..100).each do |i|
student = Student.find(i)
1.upto(rand(0..4)) do
student.clubs << Club.find(rand(1..13))
student.save
end
end
(1..100).each do |i|
student = Student.find(i)
1.upto(9) do |num|
sub = Subject.find(num)
exam_res = ExamResult.new
exam_res.name = "試験#{num}"
exam_res.score = rand(1..sub.max_score)
exam_res.subject = sub
student.exam_results << exam_res
student.save
end
end
enum gender: { male: 0 ,female: 1}
enum age: {"teen": 0, "twenty": 1}
<div class="field">
<%= form.label :gender %>
<%= form.radio_button :gender, 'male' %>男性
<%= form.radio_button :gender, 'female' %>女性
</div>
<div class="field">
<%= form.label :age %>
<%= form.radio_button :age, '20代' %>20代
<%= form.radio_button :age, '30代' %>30代
</div>
ySQL의 출력
SELECT
subjects.name,
CAST(AVG(exam_results.score) as unsigned) as avg_score,
MAX(exam_results.score) as max_score,
MIN(exam_results.score) as min_score
FROM
students
INNER JOIN exam_results
ON students.id = exam_results.student_id
INNER JOIN subjects
ON exam_results.subject_id = subjects.id
GROUP BY subjects.id, subjects.name
# 出力結果
+--------+--------------+-----------+-------+-------+
| name | name | name | score | ratio |
+--------+--------------+-----------+-------+-------+
| taro-1 | 一次試験 | 数学 | 181 | 91 |
| taro-1 | 試験1 | 数学 | 61 | 31 |
| taro-1 | 一次試験 | 国語 | 146 | 73 |
| taro-1 | 試験2 | 国語 | 200 | 100 |
| taro-1 | 一次試験 | 英語 | 199 | 100 |
| taro-1 | 試験3 | 英語 | 108 | 54 |
| taro-1 | 一次試験 | 化学 | 99 | 99 |
| taro-1 | 試験4 | 化学 | 42 | 42 |
| taro-1 | 一次試験 | 物理 | 62 | 62 |
| taro-1 | 試験5 | 物理 | 56 | 56 |
| taro-1 | 一次試験 | 生物 | 83 | 83 |
| taro-1 | 試験6 | 生物 | 42 | 42 |
| taro-1 | 一次試験 | 世界史 | 62 | 62 |
| taro-1 | 試験7 | 世界史 | 83 | 83 |
| taro-1 | 一次試験 | 日本史 | 77 | 77 |
| taro-1 | 試験8 | 日本史 | 63 | 63 |
| taro-1 | 一次試験 | 地理 | 81 | 81 |
| taro-1 | 試験9 | 地理 | 15 | 15 |
+--------+--------------+-----------+-------+-------+
페이지 출력
students_컨트롤러의show 동작 편집
활성 레코드 쿼리 인터페이스
app/controllers/studetns_controller.rb
def show
@students = Student.joins(:subjects)
.select('students.name, students.email, students.age, students.gender, students.opinion, subjects.id as subject_id')
.select('exam_results.name as exam_result_name, subjects.name as subject_name, exam_results.score')
.select('CAST((exam_results.score / subjects.max_score) * 100 as unsigned) as ratio')
.where(id: params[:id])
avg_result = Student.joins(:subjects)
.select('subjects.id as subject_id')
.select('CAST(AVG(exam_results.score) as unsigned) as avg_score')
.select('MAX(exam_results.score) as max_score')
.select('MIN(exam_results.score) as min_score')
.group('subjects.id')
.order('subjects.id')
@score_hash = {}
avg_result.each do |avg_res|
h = Hash.new
h[:avg_score] = avg_res.avg_score
h[:max_score] = avg_res.max_score
h[:min_score] = avg_res.min_score
@score_hash[avg_res.subject_id] = h
end
end
페이지 뷰 편집
app/views/students/show.html.erb
<table border="1">
<tr>
<th>科目名</th>
<th>点数</th>
<th>平均</th>
<th>最高</th>
<th>最小</th>
</tr>
<% @students.each do |student| %>
<tr>
<td><%= student.subject_name %></td>
<td><%= student.score %></td>
<td><%= @score_hash[student.subject_id][:avg_score] %></td>
<td><%= @score_hash[student.subject_id][:max_score] %></td>
<td><%= @score_hash[student.subject_id][:min_score] %></td>
</tr>
<% end %>
</table>
페이지 출력 결과
매번 스스로 코드를 고려해도 결과는 자신의 힘으로 도달할 수 없다
이번 출력도 강사가 정답으로 제시한 코드다.
보면 저렇게 되지만 아직 인코딩을 다 할 수는 없어요.
Reference
이 문제에 관하여(10일(1): 마스터(DB에 정보를 입력하여 페이지로 내보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/OriverK/items/b7eae8f195d9d2111ea4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)