Missing template error for Ruby on Rails Application - ruby-on-rails

I have a view in the LoginController with the following code
def home
render 'home'
end
However, whenever I load my web server, it shows the error message:
ActionView::MissingTemplate (Missing template login/home, application/home with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}. Searched in:
* "C:/Users/60984/prairielearn-eecs/app/views"
* "C:/Ruby30/lib/ruby/gems/3.0.0/gems/actiontext-6.1.7.2/app/views"
* "C:/Ruby30/lib/ruby/gems/3.0.0/gems/actionmailbox-6.1.7.2/app/views"
):
app/controllers/login_controller.rb:16:in `home'
Even though I have the file in the directory app/views/login/home.html.erb.
I tried changing it to a more specific directory such as
def home
render 'login/home'
end
but it still fails. However, I tried using the whole path like
render file: 'C:/Users/.../app/views/login/home.html.erb'
With the code above, the problem changed into the html.erb is not being interpreted, it will display the code blocks on the browser no matter what browser I use.
I am just confused about why it doesn’t work since I have the html file in the designated place.

Related

Render a partial in gem views folder

I'm writing a gem and I need that the app that use the gem could render a partial using = render "user_role_select" from the layout/application.html.haml.
My _user_role_select.html.haml lives in the gem at the path app/views/gem_name/. When I'm calling the render I'm getting the followed message:
Missing template /user_role_select with {:locale=>[:en],
:formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html,
:builder, :ruby, :haml]}. Searched in: * "/ruby-app/app/views" *
"/bundle/gems/bootstrap-kaminari-views-0.0.5/app/views" *
"/bundle/gems/kaminari-core-1.0.1/app/views" * "/ruby-app" * "/"
I'm noticed that the kaminari folder for example is included in the folders in which rails search so I'm guessing this is possible, but even looking in them source code I couldn't find any hint.

Template missing in render :file in ajax call when the file exists in Rails 4.2

Ajax is used for Bootstrap modal call. The js.erb file is called successfully and this js.erb file then should load html.erb residing in the same subdir as the js.erb is under biz_workflowz/app/views/application/. Here is the js.erb file:
$("#newworkflow .modal-content").html('<%= j render(:file => "/biz_workflowx/application/event_action.html.erb") %>');
$("#newworkflow").modal();
However the event_action.html.erb is never found. The error is raised in action_view/path_sets.rb:
def find(*args)
find_all(*args).first || raise(MissingTemplate.new(self, *args)) #find_all(*args).first returns NIL
end
The error is:
ActionView::Template::Error (Missing template c:/d/code/rails_proj/engines/biz_workflowx/app/views/application/event_action.html.erb with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}. Searched in:
.......
* "C:/D/code/rails_proj/engines/biz_workflowx/app/views" #<<== did search the subdir but did not find anything
* "C:/D/code/rails_proj/engines/searchx/app/views"
* "C:/D/code/rails_proj/engines/commonx/app/views"
* "C:/D/code/rails_proj/engines/authentify/app/views"
* "C:/D/code/rails_proj/webportal"
* "C:/"
):
1: $("#newworkflow .modal-content").html('<%= j render(:file => "biz_workflowx/application/event_action.html.erb") %>');
2: $("#newworkflow").modal();
actionview (4.2.0) lib/action_view/path_set.rb:46:in `find'
Even with hardcoded path to the file event_action.html.erb, it still returns template missing. The similar js.erb code has been used in a few places for ajax call and I does not see why here it does not work. What could cause this error?
Updated
Here is the debug windows showing the biz_workflowz/app/views has been searched by resolver which does not see the file under /application/. Strange!
add event_action.html.erb file under c:/d/code/rails_proj/engines/biz_workflowx/app/views/application

Rails missing template for JS file

On my application controller I have a method where I'm trying to render a specific JS file located in the folder lib/assets/api/v1/
lib = render_to_string File.join(Rails.root,"/lib/assets/api/v1/shasync.js")
render :text => lib
The problem is that I'm getting the following MissingTemplate error:
ActionView::MissingTemplate (Missing template Users/name/Projects/project/lib/assets/api/v1/shasync.js with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
* "/Users/name/Projects/project/app/views"
* "/Users/name/.rvm/gems/ruby-2.2.1/gems/devise-3.5.2/app/views"
* "/Users/name/.rvm/gems/ruby-2.2.1/gems/shopify_app-6.2.0/app/views"):
Can anyone help please? I did this in the past and it worked, don't know why it's not working anymore.

In rails what else should you do to render a file in footer?

I am a beginner in rails and I have to add a footer to my site.
I just copied the line in the application.html where it renders a file
= render :partial => "shared/navigation"
and put my file
= render :partial => "shared/footer"
Then in the shared folder I created my file _footer.html.haml and put my html code there.
But the site gives me the following error:
ActionView::MissingTemplate at /
Missing template shared/footer with {:locale=>[:en], :formats=>[:html]...
What else should I do so that rails can fetch that file like any other file from the shared folder?
Thanks!
Edit: Full error is this one:
ActionView::MissingTemplate - Missing partial shared/footer with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :haml, :rjs]}. Searched in:
* "/home/username/workspace/myapp/app/views"

Rails doesn't seem to be looking for partial in the same directory

I'm working on exercise 3 in Chapter 10 of Michael Hartl's The Ruby on Rails Tutorial.
I'm refactoring code in app/views/static_pages/home.html.erb and moving it into the two partials:
app/view/static_pages/_signed_in.html.erb
app/view/static_pages/_non_signed_in.html.erb
and calling render on both files. For some reason I get this error:
ActionView::Template::Error:
Missing partial static_pages/non_signed_in, application/non_signed_in with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}.
However, when I move the two partials to the sibling directory app/view/static_pages/shared and tell render to look there (i.e. "render 'shared/signed_in'" and "render 'shared/non_signed_in'"), the error disappear. Thoughts?
Thanks!!

Resources