Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 6 ActionText isn't working on Heroku (undefined method 'rich_text_area_tag')

I am using ActionText to edit a paragraph and it works perfectly locally but when I deploy it to Heroku the page which has the form with rich_text_area it throws an error saying undefined method rich_text_area_tag even though I followed the rails guide. I thought I needed to configure Active Storage on production but that's not the case.

Here is what I am getting in Heroku's logs: ActionView::Template::Error (undefined method 'rich_text_area_tag' for #<#<Class> Did you mean? rich_text_area)

<%= f.label :something, class:'label' %>
<%= f.rich_text_area :something %>
like image 614
Grofen Avatar asked Aug 23 '19 16:08

Grofen


3 Answers

I found this online, and it was helpful for me:

https://github.com/JoeWoodward/spree_helper_issue

I am not sure if this is the correct way to do it, but it's a temporary workaround.

SOLUTION:

In application_controller.rb enter the following:

require 'action_text'

class ApplicationController < ActionController::Base
  helper ActionText::Engine.helpers

  ...
end

Docs for helper: https://apidock.com/rails/AbstractController/Helpers/ClassMethods/helper

like image 82
Violeta Avatar answered Nov 09 '22 20:11

Violeta


First of all make sure that you have this line in config/application.rb:

require 'rails/all'

If it's a rails 6 app action_text/engine should be loaded.

If it doesn't it's possible taht zeitwerk is not loaded. This happens when you have a rails 5.2 app that was updated to rails 6.

In the same file (config/application.rb) you have to change config.load_defaults to 6.0:

config.load_defaults 6.0

If you want to know what happens in the background take a look at this link on line 125.

like image 3
TopperH Avatar answered Nov 09 '22 20:11

TopperH


To avoid cluttering the ApplicationController code, you can use an initializer:

i.e. add a new file config/initializers/action_text.rb:

ActiveSupport.on_load(:action_view) do
  include ActionText::ContentHelper
  include ActionText::TagHelper
end

Inspired by p8's comment in a closed Rails issue.

like image 1
Puffo Avatar answered Nov 09 '22 19:11

Puffo