Rails로 기본 정보 기술자 시험의 과거 문제 사이트를 만든다(3:부모와 자식 관계, 등록편)
6869 단어 기본 정보 기술자 시험루비Railsapi
소개
유루~쿠 배운다. 모두의 웹 공부 커뮤니티. "뉴~부루회"를 운용중입니다.
h tps : // 네 w 부루. 기주 b. 이오/
거기서, 뭔가 교육용의 컨텐츠를 갖고 싶어~라고 생각하고, 이번 기획을 스타트했습니다!
Rails에서 기본 정보 기술자 시험의 과거 문제 사이트를 만듭니다!
최종 목표
히스토리
1: 구축편
htps : // 코 m / 네 w 부루 / 있어 ms / 에 d59f47 아 c645b19620f6
2:일본어화(i18n)편
htps : // 이 m/네 w부루/있어 ms/4f12fdb61bf6cd601545/
3:부모와 자식 관계, 등록편
본 페이지
4:부모와 자식 관계, 참조편
h tps:// 퀵했다. 작은 m / 네 w 불 / MS / 51b11BD02691 그림 FC2 c0d
5: API편
htps : // 코 m / 네 w 부루 / 있어 ms / 89f9f847 아 2648 bd d006c
6:SlackBOT편
htps : // 이 m / 네 w 부루 / 있어 ms / 감히 b9 아 cb453이다 786bd59
7 : Heroku 배포 ~ 자동화 편
htps : // 이 m / 네 w 부루 / 있어 ms / 0 아 8 ㄴ b02 에 1 8 c8 737 c7
이번에 할 일
※레이아웃을 하려고 생각했습니다만, 이쪽이 우선이므로, 예정을 변경시키고 받았습니다.
부모와 자식 관계를 설정하고 등록하기 쉽습니다.
1. gem 'cocoon', gem 'jquery-rails'를 추가합니다.
Rails5.1에서 jQuery가 사라졌으므로 jquery-rails도 추가해야합니다.
./Gemfilegem 'cocoon'
gem 'jquery-rails'
bundle-install$ bundle install
2. Model에서 부모-자식 관계를 설정합니다.
· 부모 (question)에는 "has_many :answers"를 추가합니다.
・부모가 삭제되었을 때, 함께 아이도 삭제되도록, 「dependent: :destroy」를 붙입니다.
· accepts_nested_attributes_for를 사용하면 부모와 자식을 함께 create/update 할 수 있도록 합니다.
· 삭제할 수 있도록 "allow_destroy: true"를 붙입니다.
app/models/question.rb has_many :answers, dependent: :destroy
accepts_nested_attributes_for :answers, allow_destroy: true
자식 (models/answer.rb)은 작성시 참조로 사용되므로 자동으로 설정됩니다.
app/models/answers.rb belongs_to :question
3. View에 부모와 자식을 동시에 등록·갱신할 수 있도록 설정합니다.
application.js에 다음을 추가합니다.
app/javascripts/application.js//= require jquery
//= require cocoon
view를 변경합니다.
app/views/questions/_form.html.slim .answers
= f.fields_for :answers do |answer|
= render 'answer_fields', f: answer
= link_to_add_association "追加", f, :answers
아이의 정보 등록용 폼이 되는 view 파일을 신규 작성합니다.
app/views/questions/_answer_fields.html.slim.nested-fields
.field
= f.label :msg
= f.text_area :msg
.field
= f.label :correct
= f.check_box :correct
= link_to_remove_association "削除", f
4. 컨트롤러에서 등록 가능하게 합니다.
아래와 같이 아이의 파라미터를 받을 수 있도록 합시다.
app/controllers/questions_controller.rb def question_params
params.require(:question).permit(:category1, :category2, :category3, :msg, answers_attributes: [:id, :msg, :correct, :_destroy])
end
5. 확인합니다.
신규 작성 화면은 이런 느낌이 됩니다.
추가 버튼을 누를 때마다 자녀의 입력 영역이 추가됩니다.
이번에는 여기까지
고마워요!
다음 번에는 참조 화면 등에 어린이 정보를 추가하겠습니다.
Reference
이 문제에 관하여(Rails로 기본 정보 기술자 시험의 과거 문제 사이트를 만든다(3:부모와 자식 관계, 등록편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/newburu/items/f2a20289be5ec1fc1b77
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
gem 'cocoon'
gem 'jquery-rails'
$ bundle install
has_many :answers, dependent: :destroy
accepts_nested_attributes_for :answers, allow_destroy: true
belongs_to :question
//= require jquery
//= require cocoon
.answers
= f.fields_for :answers do |answer|
= render 'answer_fields', f: answer
= link_to_add_association "追加", f, :answers
.nested-fields
.field
= f.label :msg
= f.text_area :msg
.field
= f.label :correct
= f.check_box :correct
= link_to_remove_association "削除", f
def question_params
params.require(:question).permit(:category1, :category2, :category3, :msg, answers_attributes: [:id, :msg, :correct, :_destroy])
end
고마워요!
다음 번에는 참조 화면 등에 어린이 정보를 추가하겠습니다.
Reference
이 문제에 관하여(Rails로 기본 정보 기술자 시험의 과거 문제 사이트를 만든다(3:부모와 자식 관계, 등록편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/newburu/items/f2a20289be5ec1fc1b77텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)