【Rails】날짜의 입력 폼의 작성과 브라우저에의 출력에 관한 정리

소개



rails에서의 WEB어플리 개발중에 있어서, 날짜 관계의 취급으로 고민했으므로 그 비망록입니다.

하고 싶은 일



html의 input 태그에는 type="date"를 지정할 수 있습니다.
 이 기능을 그대로 이용하여 입력 양식을 작성합니다.

 이 속성은 특수 날짜 선택 인터페이스를 사용하여 사용자가 날짜를 입력하게하는 입력 필드를 생성합니다. 결과 값에는 연도, 월, 일이 포함되지만 시간은 포함되지 않습니다.
브라우저에 의해 인터페이스는 마을 거리입니다.

input 태그



안드로이드의 chorome에서는 다음 이미지와 같이 표시됩니다.
서투른 스스로 폼을 만드는 것보다, 사용성이 높다고 생각합니다.


Ruby strftimr 메서드로 표시할 형식을 정렬합니다.



Ruby의 strftime 메소드는 날짜와 날짜와 시간의 데이터를 편집하여 문자열로 변환하는 메소드입니다.
예를 들어, "2019-12-27 16:04:05"와 같은 일시 데이터를 "12/27"만 표기하고 싶은 경우가 있습니다.
오히려 시간으로 초단위까지 표시할 필요가 있을 때 쪽이 적은 것이라고 느낍니다.

strftime 메소드는 위와 같은 포맷을 정돈할 때 사용하면 편리합니다.

【문제점】datetime형과 date속성의 궁합이 나쁘다



input 태그 속성 date를 사용하는 이점과 strftime 메소드의 편의성을 이해할 수 있었습니까?
이 두 가지를 결합하면 다음 제약이 방해합니다.

1. input 태그 속성 date는 날짜 밖에 입력할 수 없다
2. strftime 메소드는 일자·시간 어느 쪽인가가 NULL이면 사용할 수 없다
  - 부수적으로, strftime 메소드를 사용해 참조할 수 있는 테이블의 컬럼형은 datetime일 필요가 있다

요약하면 input 태그 속성 date로 그대로 저장해도 strftime 메서드를 사용할 수 없습니다.

【해결책】 일단 교체



to_datetime 메소드



date 형식을 datetime 형식으로 바꿉니다. 이 때 설정되어 있지 않은 시각의 데이터에는 0이 옮겨집니다.

절차


  • input 태그 속성 date에서 우선 datetime 형의 컬럼에 데이터를 보존한다.
  • 열의 데이터를 to_datetime 메소드를 사용하여 NULL을 0으로 바꿉니다.
  • strftime 메소드로 포맷을 정돈해 표시한다.

  • 위의 프로세스에서 오류를 토하지 않고 실행할 수있었습니다.

    실제 처리



    양식

    new.html.erb
    <!-- 日付 -->
                <div class ="input-date">
                    <input name="date" type="date" />
                </div>
    

    컨트롤러에서 입력 양식에서 값 수신

    posts_controller.rb
        @homework_post = Hindext.new(deadline:params[:date])
        @homework_post.save
    

    view로 보충 (본래 컨트롤러로 해야 할 처리입니다만 편리하게 view 파일로 하고 있습니다.)

    new.html.erb
    <!-- 日付 -->
    <% date = index.deadline %>
    <% dated = date.to_datetime %>
    <%= dated.strftime('%m/%d') %>
    

    문제없이 작동했습니다.

    요약



    다양한 벽이있어 피곤합니다.

    좋은 웹페이지 즐겨찾기