0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails6 decimal型のカラムに格納されたデータの文字数を取得する

Last updated at Posted at 2021-02-10

目的

  • devimal型のカラムに格納されたデータの文字数を取得する方法をまとめる。

経緯

  • Rails6のアプリでツイート用のテンプレートを作成したい。
  • そのテンプレート内容は140文字以内に制限したい。
  • そのテンプレート内容はデータベースの複数の特定カラムに格納されているもので構成される。
  • 複数の特定カラムのデータ型はtext型とdecimal型が混在している。

結論

  • decimal型のデータの文字数は.to_sで一旦文字列に変更してから.lengthで文字数を抽出する。

詰まったところ

  • decimal型の値を.lengthのみで文字数を抽出しようとした。
  • そもそも数値に.lengthメソットは使用できない。

解決方法

  • decimal型の値の文字列は.to_iで一旦文字列に変更してから.lengthで文字数を抽出した。

  • 下記に文字数の抽出方法を記載する。

    decimal型の値.to_s.length
    

今回の具体例

  • 下記にテンプレートのビューファイルの内容を記載する。(下記に記載される内容を全て含めて140文字以内にしたい。説明のために空行を入れているため改行は考慮しない。)

    <p>
    <!-- postsテーブルのcontentカラムの内容(text型) -->
    <%= @post.content %><br>
    
    <!-- postsテーブルのtoday_study_timeの内容(decimal型) -->
    today: <%= @post.today_study_time %> h<br>
    
    <!-- postsテーブルのstudy_timeの内容(decimal型) -->
    total: <%= @post.study_time %> h<br>
    
    <!-- postsテーブルのfree_commentの内容(text型) -->
    <%= @post.free_comment %><br>
    
    <!-- postsテーブルのhash_tagの内容(text型) -->
    #<%= @post.hash_tag %>
    </p>
    
  • コントローラファイルで前述のデータベースから取得した値の文字列のトータルを140文字以下になっているかの処理を記載した。

  • 下記に処理を記載する。(今回の件を説明することに最小限のコードを記載する)

    #ビューから受け取った情報を@postに格納
    @post = Post.new(content: params[:content], 
                     study_time: params[:'study_time'],
                     today_study_time: params[:'study_time'], 
                     hash_tag: params[:hash_tag], 
                     user_id: @current_user.id, 
                     free_comment: params[:free_comment]
    )
    
    #変数word_countに各値の文字数を格納する。
    word_count = @post.content.length  + @post.hash_tag.length  + @post.free_comment.length  + @post.study_time.to_s.length + @post.today_study_time.to_s.length
    
    #word_countが140よりも大きい時にエラーで特定のページにリダイレクトされるような処理などが連なって記載されている。
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?