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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

309閲覧

既存メソッドのオーバライドはどのファイルに書けば良い?

NCC1701

総合スコア1680

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2017/10/16 07:31

###前提・実現したいこと
to_jsonで出力されるデータのフォーマットを変更したいと考えてます。(後記のサイトを参考にしてます)

うまくいかないのは、オーバーライドするメソッドを記載するファイルが間違っている気がします。

config/application.rb
app/application_controller.rb

を試しました。
複数のモデルがあるので、共通してオーバライドを適用したいと考えてます。

###発生している問題・エラーメッセージ
変更されない(オーバライドしている気配がない)

###該当のソースコード

ruby

1module AppName 2 class Application < Rails::Application 3 # Settings in config/environments/* take precedence over those specified here. 4 # Application configuration should go into files in config/initializers 5 # -- all .rb files in that directory are automatically loaded. 6 config.time_zone = 'Tokyo' 7 end 8 9 class Time 10 def to_json(*a) 11 strftime('%Y年%m月%日').to_json(*a) 12 end 13 end 14end

###試したこと
puts Model.last.to_json
puts JSON.generate(JSON.parse(Model.last.to_json))(こっちは変更されないのが当たり前だと思いますが、念のため)

いずれも、
"created_at":"2017-10-14T13:30:40.750+09:00"
と、フォーマットが変更されませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
出力されるJSONの形式をカスタマイズする

pry(main)> .ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux-musl]
pry(main)> .rails --version
Rails 5.0.6

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

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

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

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

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

guest

回答1

0

ベストアンサー

module AppNameの中に入れてしまっているため、class Timeは、実際にはAppName::Timeというクラスを新規作成する扱いとなってしまいます。グローバルにclass Timeとかく必要があります。

Railsの場合、そのような既存クラスなどの調整はconfig/initializer/*.rbに置くのが一般的です。

なお、既存のクラスを書き換えると副作用がある可能性がありますので、入念なチェックが必要です(特に、APIにJSONを投げる場合などは要注意です)。

投稿2017/10/16 07:54

maisumakun

総合スコア145183

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

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

NCC1701

2017/10/17 03:05

ありがとうございました。方針を変更することにしました。 1. initializer/で書いたメソッドがオーバーライドしなかった 2. アドバイスの副作用(時間が経つとオーバライドしたことを忘れそう)を考慮して、フォーマット変更のメソッドを明示する 3. as_jsonで一旦処理できること という理由です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問