質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

1041閲覧

Railsを使ったAPIで、unixtimeを表示する方法

MASA_H

総合スコア4

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/10/23 11:27

解決したいこと

Railsを使ったAPIで、created_atで表示されている部分をunixtimeに変換したい。

現在の状況

登録したデータを一覧で表示する際に、created_atが次のようになっています。

{ "id": 1, "category": "開発", "body": "システムを開発する", "created_at": "2021-10-23T10:22:16.349Z" }

これをunixtimeへと変換して表示したいです。

自分で調べたこと

RubyではTime.parse(2021-10-23T10:22:16.349Z).to_iのようにするとunixtimeへと変換できることが分かりました。
しかしRails上では、どこに、どのように記載すれば良いのか分かりません。

データを登録するcreateアクション内?
データを表示するindexアクション内?
レスポンスを整形するserializer内?

以下にcontollerとserializerのコードを添付致しますので、ご教授頂けると幸いです。

app/controllers/ideas_controller.rb

1class IdeasController < ApplicationController 2 before_action :set_category 3 4 def create 5 @category = Category.create(name: idea_params[:name]) if @category.blank? 6 idea = Idea.new(body: idea_params[:body], category_id: @category.id) 7 if idea.save 8 render json: { status: 201 } 9 else 10 render json: { status: 422 } 11 end 12 end 13 14 def index 15 if idea_params[:name].nil? 16 ideas = Idea.all 17 render json: ideas 18 elsif @category.nil? 19 render json: { status: 404 } 20 else 21 ideas = @category.ideas 22 render json: ideas 23 end 24 end 25 26 private 27 28 def idea_params 29 params.permit(:body, :name) 30 end 31 32 def set_category 33 @category = Category.find_by(name: idea_params[:name]) 34 end 35 end

idea_serializer.rb

1class IdeaSerializer < ActiveModel::Serializer 2 require 'time' 3 attributes :id, :category, :body, :created_at 4 belongs_to :category 5 def category 6 object.category.name 7 end 8 9end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

IdeaSerializer の attributes から :created_at を削除します。
attribute :created_at を追加し、その中で変換します。

ruby

1class IdeaSerializer < ActiveModel::Serializer 2 attributes :id, :category, :body 3 belongs_to :category 4 5 def category 6 object.category.name 7 end 8 9 attribute :created_at do 10 object.created_at.to_i 11 end 12end

投稿2021/10/24 00:03

neko_daisuki

総合スコア2090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MASA_H

2021/10/24 05:11

unixtimeの表示に成功しました! selializer、attribgute等に関する知識をもう一度しっかり学習致します! ご回答頂きありがとうございました。
guest

0

created_atは触らない方が良いでしょう。
私でしたら modelに created_at_unixtime とでもいうmethodを作って、それを呼ぶようにします。

投稿2021/10/23 13:27

winterboum

総合スコア23416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MASA_H

2021/10/23 14:36

ご回答ありがとうございます。 ご指摘内容を試みた上で、下記3点についてもう少し詳しく伺いたく、 ①メソッドを作るモデル→ Ideaモデル? ②メソッドの中身→Time.parseを用いる? ③呼び出し場所→indexアクション内? 私の知識では、created_atに触れずにunixtimeへ変換する方法が上手く繋がっておりません…。 厚かましいお願いで恐縮ですが、可能であれば再度ご教授頂ければ幸いです。
winterboum

2021/10/23 23:34

① YES ② そこは詳しくないので、よりよい方法があるか、はわかりません。とりあえずはいまわかっている方法 で実装し、後でリファクタすれば良いでしょう ③ created_at を unictime で表示したいところ、です。そこはどこなのでしょう
MASA_H

2021/10/24 05:09

もうお一方の回答にてunixtimeを表示することができました! お忙しい中、ご回答頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問