📝

【Rails4→5の移行時に注意】render textはrender plainに置き換わりました

2021/01/03に公開

Rails 4のプロジェクトを引き継いてRails5でリプレースしているときにハマったのでメモ。

Rails 4系では動くコード

以下は、シンプルに「Hello,World!」 を返すコントローラです。

class SomeController < ApplicationController

  def index
    render text: "Hello,World!"
  end

end

これが、Rails 5系だと正しく動かなくなります。

解決策:Rails 5系に移行するときは、render text: からrender plain: にする

You can send plain text - with no markup at all - back to the browser by using the :plain option to render:
Rails Guides

class SomeController < ApplicationController

  def index
    render plain: "Hello,World!"
  end

end

これで解決。

Rails6系が出て久しいですが、残念ながらすべてのバージョンアップに追従できている現場は多くありません。なのでこの記事も有用であると思い投稿しました。(どうせ、4 -> 6とかあげようとしたときにも同様のハマりが発生すると思うので)

参考

ruby - What to use instead of render :text (and render nothing: true) in rails 5.1 and later? - Stack Overflow

Discussion