.json.rabl not showing in view for Rails app - ruby-on-rails

Trying to get User model to print to JSON, tried making a file with a json.rabl extension as follows:
file.json.rabl
object #users
attributes :id, :name
When I try to view this, I get the following error message:
Missing template users/autocomplete, application/autocomplete with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee, :rabl, :rb]}.
However, if I rename the file to file.rabl, it renders the JSON, but in an HTML page instead. How do I get it to print a pure JSON file?
Here is my controller code for the file view:
def file
#users = User.all
respond_to do |format|
format.html
format.json
end

Just had to add .json to the URL.

Related

Missing template (jbuilder)

Rails trying to find users folder with jbuilder files, which exist, but can't
Application
Missing template users/index, application/index with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee, :jbuilder]}. Searched in:
* "/home/bjorn/Documents/poller/app/views"
* "/usr/lib/ruby/gems/2.3.0/gems/devise_token_auth-0.1.37/app/views"
* "/usr/lib/ruby/gems/2.3.0/gems/devise-4.0.3/app/views"
full error stack
# controllers/users_controller.rb
class UsersController < ApplicationController
def index
#users = User.all
end
def show
#user = User.find(params[:id])
end
end
# routes.rb
resources :users, only: [ :index, :show ]
I cloned your repo and I don't get this exception at /api/users.
However you need to rename your layout file application.slim to application.html.slim. Otherwise jbuilder will render the layout too.

Render js.erb from controller

I have a controller action that I am trying to only render js from. Here's what I have
def get_script
respond_to :js
render :script
end
I'm using respond_to :js to hopefully force the request to only respond to js. Then I'm calling render :script to load a file called script.js.erb
My request is the following
Completed 500 Internal Server Error in 15ms (ActiveRecord: 0.5ms)
ActionView::MissingTemplate (Missing template widgets/get_script, application/get_script with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder]}. Searched in:
* "/home/jkoehms/TECC/tecc/app/views"
* "/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/devise-3.5.1/app/views"
)
So there are two problems here. Although the request is processed as JS, the render is looking for js or html as indicated in the formats section. Secondly, the render is looking for get_script.js.erb when it should be looking for script.js.erb. I used the following documentation as a resource for rendering: Layouts and Rendering
Question:
1.) Does the respond_to :js do what I'm hoping it to do, or do I have to put it in a do |format| block?
2.) Why isn't render :script looking for script.js.erb?
Have you tried this inside your view?
render "widgets/script.js.erb", format: :js

Pdf creating in rails, missing template

Missing template events/index, application/index with {:locale=>[:en], :formats=>[:pdf], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :haml]}. Searched in: * "c:/Put/Team/project/app/views" * "c:/Put/Team/project/vendor/bundle/ruby/2.0.0/gems/browserlog-0.0.2/app/views" * "c:/Put/Team/project/vendor/bundle/ruby/2.0.0/gems/devise-3.4.1/app/views"
Here is the error I encounter when I'm trying to create a pdf from the ruby application I have made. This error occurs when I put .pdf on the end of my URL.
This is the code I've implemented in my app controller file
def show
#event = current_user.events.find(params[:id])
respond_to do |format|
format.html
format.pdf do
pdf.text = Prawn::Document.new
pdf.text "Hello World"
send_data pdf.render
end
end
end
It wants to render a template in your views, so my guess it's not recognizing your PDF render statement. It is odd that the pointer is to events/index while you're saying the source is the show method.
Try referring to this StackOverflow thread:
How to render format in pdf in rails
Make sure you name your view to "show.pdf".

Rails - in controller, how to render an action from a different controller?

I have a page where is displayed information about a respective car (it's a controller cars, action show). On this page, I render _form from the controller called reviews.
When I send out the form (through AJAX), the review is successfully created, but I am not able from the reviews controller render any action from the cars controller - to be more specific, here's the code:
# reviews_controller
def create
#review = Review.new(review_params)
#review.save
#respond_with(#review)
respond_to do |format|
format.js { render :action => "/cars/car_profile" }
end
end
The error I get:
ActionView::MissingTemplate (Missing template reviews/cars/car_profile, application/cars/car_profile with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :haml, :jbuilder]}. Searched in:
* "/Users/adam/rubydev/claisy/app/views"
* "/Users/adam/.rvm/gems/ruby-2.0.0-p481/gems/devise-3.4.1/app/views"
):
app/controllers/reviews_controller.rb:28:in `block (2 levels) in create'
app/controllers/reviews_controller.rb:27:in `create'
How can I render in controller an action that is located in a different controller?
Thank you in advance.
:action forces rails to search for templates within the current controller view folder.
Missing template reviews/cars/car_profile
You should write this instead
render "cars/car_profile"
See point 2.2.3
What if you want to render a template from an entirely different
controller from the one that contains the action code? You can also do
that with render, which accepts the full path (relative to app/views)
of the template to render.

Rendering a partial with ajax - missing view

I have commendations/_create.html.erb which includes in a form -
<%= form_for(current_user.commendations.new(...), remote: true) do |f| %>
<%=...
and in commendations_controller.rb
def create
...
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
but I'm getting the following error in the server log -
Completed 500 Internal Server Error in 7ms
ActionView::MissingTemplate (Missing template commendations/create, application/create with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
* "/Users/dan/Documents/ROR/fic/app/views"
* "/Users/dan/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/devise-3.4.1/app/views"):
app/controllers/commendations_controller.rb:9:in `create'
I can't see where I'm going wrong - the remote: true should trigger format.js which in turn should reload the partial, no?
In routes.rb I have
resources :commendations, only: [:create]
You need a file called create.js within app/views/commendations/
And in create.js do:
$("#your_div").html( "<%= j render( :partial => 'commendations/your_partial') %>" );

Resources