Rails에서 양식을 제출할 때 풀다운 메뉴 항목을 CSV 가져오고 DB 데이터에서 표시하고 싶습니다.
소개
Rails에서 양식을 제출할 때 풀다운 메뉴 항목을 CSV 가져오고 DB 데이터를 사용하여 표시하기 위한 비망록입니다.
환경
참고 URL
CSV 가져오기 관련
htps : // 코 m / 류타 1346 / ms / c21cb70b9879c66c8639
htps : // 코 m / 소 r c- b / ms / 50 046 2 2764c12c21
htps : // / cs. 루 by ぁん g. 오 rg / 그럼 / ㅁ st / c ぁ s / CSV. HTML
htps : // m / 3 녀석 / ms / 416411c0 a 8f696dbf99
htps : // 이 m / r tt l / ms / 672 336 03335c 6b34
풀다운 메뉴 관련
htps : // 이 m/Hr조차 d/있어 ms/56677d6c266d8 아 53 7
htps : // 코 m/카와카미_쇼타로/있어 ms/11 아 677bf34136cb7686d
htps : // 코 m / 코 뻐꾸기 t / ms / b58888506 41d1370fd1
htps // c 리에 t. 네 t / po sts / 라이 ls
htps : // 이 m/_아키라 19/이고 ms/c218186983f444c2d794
국가 코드 목록 CSV
htps : // 이 m / 타오 _s / ms / 3 ~ y2b90 아 2751 bfb d585
목표
외형의 이미지입니다↓
풀다운 메뉴 옵션은 DB에 저장된 열의 정보를 사용하여 표시됩니다↓
구현
CSV 가져오기와 폼의 풀다운화를 나누어 설명합니다.
1. 풀다운 메뉴 옵션을 CSV 가져오기
rails
명령으로 가져 오기 프로세스 실행 Ruby CSV 라이브러리를 사용하여 가져오기 프로세스를 수행합니다.
이번에는 다음과 같은 CSV에서 국가 이름 목록을 가져왔습니다.
작성한 CSV 파일이 루트 디렉토리에 추가되었습니다.
country.csv
番号,国・地域名,ISO 3166-1に於ける英語名,数,三字,二字,場所,各行政区分
1,アイスランド,Iceland,352,ISL,IS,北ヨーロッパ,ISO 3166-2:IS
2,アイルランド,Ireland,372,IRL,IE,西ヨーロッパ,ISO 3166-2:IE
CSV는 국가 코드 목록 CSV을 사용했습니다.
1. Country 모델링
아래와 같은 모델을 만들었습니다.
region 컬럼은 이번에는 사용하지 않습니다.
attribute
유형
country_name
문자열
region
문자열
# Country モデル作成
$ rails g model Country country_name:string region:string
2. 가져오기 처리 추가
가져 오기 프로세스는 seeds.rb에 추가되었습니다.
별도 파일을 작성해 runner 명령으로 실행하는 방법 도 있는 것 같습니다.
seeds.rb
require "csv"
# CSV ファイルへのパスは絶対パスで指定
CSV.foreach("country.csv", headers: true) do |row|
Country.create!(
country_name: row["国・地域名"],
region: row["場所"]
)
end
3. 가져오기 처리 수행
rails
명령으로 CSV 가져오기를 수행합니다.seed 파일에 다른 처리도 쓰고 있었으므로 이번에는 DB 내를 완전히 삭제하고 다시 가져왔습니다.
# CSV をインポートしてDB に保存する場合はこれだけ
$ rails db:seed
# DB を消去して全て入れ直す
$ rails db:migrate:reset
$ rails db:seed
# rails コンソールでインポートされたか確認
$ rails c
# インポートした国名の件数を確認
> Country.count
249
2. 풀다운 메뉴의 선택 항목을 DB 데이터를 사용하여 표시
새 게시시 양식 제출의 View 파일을 수정합니다.
view/model_names/new.html.erb
# 修正前
<%= form_with model: @model_name do |f| %>
<%= f.label :country %>
<%= f.text_field :country %>
<%= f.submit "送信" %>
<% end %>
view/model_names/new.html.erb
# 修正後
<%= form_with model: @model_name do |f| %>
<%= f.label :country %>
<%= f.collection_select :country, Country.all, :id, :country_name, prompt: "国を選択してください" %>
<%= f.submit "送信" %>
<% end %>
# collection_select の文法
<%= f.collection_select <保存先のカラム名>, <表示用の配列データ>, <保存する値のカラム名>, <表示用のカラム名>, <オプション> %>
国を選択してください
표시 collection_select
의 사용법에 대해서는 여기 해설을 매우 알기 쉽습니다.학습
추가
RSpec의 풀다운 표시 테스트 중에 test 환경에서도 seeds.rb의 초기 데이터가 필요하기 때문에 환경별로 seeds.rb를 분할했습니다.
test 환경에서의 풀다운의 표시가 되어 있지 않은 것을 눈치채지 않고 빠져 버렸으므로 비망록 를 추가했습니다.
Reference
이 문제에 관하여(Rails에서 양식을 제출할 때 풀다운 메뉴 항목을 CSV 가져오고 DB 데이터에서 표시하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/karlley/items/b212994c61fb4a868042
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Rails에서 양식을 제출할 때 풀다운 메뉴 항목을 CSV 가져오고 DB 데이터에서 표시하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/karlley/items/b212994c61fb4a868042텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)