【Rails/MySQL】데이터형을 integer로부터 float로 변경해 number_field로 소수점을 취급할 수 있도록 한다

이전 기사의 이어서 처음으로 float형을 취급했으므로 메모

하고 싶은 일


  • DB에 잘못 integer 형으로 만든 열을 float 형으로 변경
  • form_for에서 number_field로 소수점을 처리 할 수있게합니다.
  • DB에 저장된 값을 합산하는 메소드 만들기

  • 참고



    【Rails】 form_for 의 number_field 로 소수를 입력할 수 있도록 한다
    htps : // m / g g / ms / 07f789 b22c7 a7 bf6 a19

    마이그레이션을 사용하여 열 추가, 삭제 및 데이터 유형 변경 [내용 메모]
    htps : // 이 m/다wn_628/있어 ms/13후64dc6d600에921세3

    【Rails】 칼럼의 합계치를 구한다!
    htps : // 이 m/토모키치_루 by/있어 ms/8758 아 91566957cfc5429

    number_field에서는 정수만 처리할 수 있습니다.



    new.html.erb
    <%= form_for @count_time do |f| %>
     <%= f.number_field :count_hour, class:'input_form' %>
     <%= f.submit '登録', class:'input_submit' %>
    <% end %>
    



    라는 양식이 있고,

    소수점 숫자를 넣으면,

    라는 식이기 때문에

    new.html.erb
    <%= form_for @count_time do |f| %>
     <%= f.number_field :count_hour, step: '0.1', class:'input_form' %>
    <%# step: '0.1'を追加 %>
     <%= f.submit '登録', class:'input_submit' %>
    <% end %>
    
    step: '0.1' 를 추가하면 소수점 이하 1위까지의 수치를 취급할 수 있습니다.

    이 경우 DB에는 정수로만 저장됩니다.



    DB의 count_hourinteger型이므로 정수만 저장할 수 있으므로 열 유형을 변경합니다.

    터미널
    $ rails g migration change_data_count_hour_to_count_time
    Running via Spring preloader in process 94544
          invoke  active_record
          create    db/migrate/20200103074431_change_data_count_hour_to_count_time.rb
    

    열 이름이 count_hour이고 테이블 이름이 count_time입니다.

    20200103074431_change_data_count_hour_to_count_time.rb
    class ChangeDataCountHourToCountTime < ActiveRecord::Migration[5.2]
      def change
        change_column :count_times, :count_hour, :float #追記。テーブル名は複数形で
      end
    end
    
    rails db:migrate
    이제 float 유형으로 변경할 수 있었으므로 number_field에서 보낸 소수점 값을 DB에 저장할 수 있습니다.

    DB 값을 뷰로 그리기



    index.html.erb
      <table>
        <tr>
          <th>日付</th>
          <th>時間</th>
        </tr>
        <% @count_time.each do |count_time| %>
          <tr>
            <td><%= count_time.created_at.to_date %></td>
            <td><%= count_time.count_hour %>時間</td>
          </tr>
        <% end %>
      </table>
    



    sum 메소드를 사용하여 학습 시간의 합계 표시



    count_time_controller.rb
    class CountTimesController < ApplicationController
     def index
      @count_time = CountTime.where(user_id: current_user.id).order('updated_at DESC').limit(5)
      @count_hour = @count_time.sum(:count_hour)
     end
    end
    

    sum 메소드의 인수에 열을 지정하여 합계 값을 발행합니다.

    완성





    요약



    일단 이것으로 자신이 처음 상상했던 주요 기능이 완성되었습니다. 개발에 그런 시간이 걸리지 않는 앱이었지만 모르는 것도 배울 수 있었기 때문에 좋았을까라고. 그리고는 생각해 낸 추가의 기능을 개발해 나가려고 생각합니다.

    좋은 웹페이지 즐겨찾기