-
<%= render partial: "nav", selected: "about"}%>
-
<%= render partial: "nav", local_variables: {selected: "about"} %>
-
<%= render partial: "nav", locals: {selected: "about"}
Q2. Within a Rails controller, which code will prevent the parent controller's before_action :get_feature
from running?
-
skip_before_action :get_feature
-
skip :get_feature, except: []
-
prevent_action :get_feature
-
:redis_cache_store
Q3. Which statement correctly describes a difference between the form helper methods form_tag
and form_for
?
- The
form_tag
method is for basic forms, while theform_for
method is for multipart forms that include file uploads. - The
form_tag
method is for HTTP requests, while theform_for
method is for AJAX requests. - The
form_tag
method typically expects a URL as its first argument, while theform_for
method typically expects a model object. - The
form_tag
method is evaluated at runtime, while theform_for
method is precompiled and cached.
- A trigger that is executed before an alteration of an object's state
- A method that is executed before an ActiveRecord model is saved
- A callback that fires before an event is handled
- A method in a controller that is executed before the controller action method
-
ActiveSupport::Concern
-
RailsHelper.CommonClass
-
ActiveJob::Mixin
-
ActiveSupport::Module
Q6. In Rails, which code would you use to define a route that handles both the PUT
and PATCH
REST HTTP
verbs?
-
put :items, include: patch
-
put 'items', to: 'items#update'
-
match 'items', to 'items#update', via: [:put, :patch]
-
match :items, using: put && patch
- GET, POST, PATCH, DELETE
- REDIRECT, RENDER, SESSION, COOKIE
- INDEX, SHOW, NEW, CREATE, EDIT, UPDATE, DESTROY
- CREATE, READ, UPDATE, DELETE
-
Product.where("name = #{@keyword}")
-
Product.where("name = " << @keyword}
-
Product.where("name = ?", @keyword
-
Product.where("name = " + h(@keyword)
Q9. Given this code, which statement about the database table "documents" could be expected to be true?
class Document < ActiveRecord::Base
belongs_to :documentable, polymorphic: true
end
class Product < ActiveRecord::Base
has_many :documents, as: :documentable
end
class Service < ActiveRecord::Base
has_many :documents, as: :documentable
end
- It would include a column for
:type
. - It would include columns for
:documentable_id
and:documentable_type
. - It would include columns for
:documentable
and:type
. - It would include a column for
:polymorphic_type
.
- Yes, any instance variables that are set in an action method on a controller can be accessed and displayed in a view.
- Yes, instance variables set within an action method are accessible within a view, but only when render is explicitly called inside the action method.
- No, instance variables in a controller are private and are not accessible.
- No, instance variables can never be set in a controller action method.
Q11. When a validation of a field in a Rails model fails, where are the messages for validation errors stored?
-
my_model.errors[:field]
-
my_model.get_errors_for(:field)
-
my_model.field.error
-
my_model.all_errors.select(:field)
Q12. If a database table of users contains the following rows, and id
is the primary key, which statement would return only an object whose last_name
is "Cordero"?
-------------------------------
| id | first_name | last_name |
|----|------------|-----------|
| 1 | Alice | Anderson |
| 2 | Bob | Buckner |
| 3 | Carrie | Cordero |
| 4 | Devon | Dupre |
| 5 | Carrie | Eastman |
-------------------------------
-
User.where(first_name: "Carrie")
-
User.not.where(id: [1, 2, 4, 5])
-
User.find_by(first_name: "Cordero")
-
User.find(3)
Q13. How would you generate a drop-down menu that allows the user to select from a collection of product names?
-
<%= select_tag(@products) %>
-
<%= collection_select(@products) %>
-
<select name="product_id"> <%= @products.each do |product| %> <option value="<%= product.id %>"/> <% end %></select>
-
<%= collection_select(:product, :product_id, Product.all, :id, :name) %>
Q14. For a Rails validator, how would you define an error message for the model attribute address
with the message "This address is invalid"?
-
model.errors = This address is invalid
-
errors(model, :address) << "This address is invalid"
-
display_error_for(model, :address, "This address is invalid")
-
model.errors[:address] << "This address is invalid"
- If sent using the PATCH HTTP method, the URL could be used to update a product in the database.
- If sent using the POST HTTP method, the URL would create a new product in the database.
- If sent using the GET HTTP method, the URL would execute the show action in ProductsController.
- If sent using the DELETE HTTP method, the URL would call the destroy action by default.
Q16. Given this code, which choice would be expected to be a true statement if the user requests the index action?
class DocumentsController < ApplicationController
before_action :require_login
def index
@documents = Document.visible.sorted
end
end
- The user's documents will be loaded.
- The index action will run normally because
:index
is not listed as an argument tobefore_action
. - The
require_login
method will automatically log in the user before running the index action. - The index action will not be run if the
require_login
method calls render orredirect_to
.
-
render partial: 'shared/menu', cached: true
-
render_with_cache partial: 'shared/menu'
-
render partial: 'shared/menu'
-
render partial: 'shared/menu', cached_with_variables: {}
- Concerns allow modularity and code reuse in models, controllers, and other classes.
- Concerns are used to separate class methods from models.
- Concerns are used to increase security of Rails applications.
- Concerns are used to refactor Rails views.
Q19. When using an ActiveRecord model, which method will create the model instance in memory and save it to the database?
-
build
-
new
-
create
-
save
Q20. You are using an existing database that has a table named coffee_orders
. What would the ActiveRecord model be named in order to use that table?
-
CoffeeOrders
-
Coffee_Orders
-
Coffee_Order
-
CoffeeOrder
Q21. In ActiveRecord, what is the difference between the has_many
and has_many :through
associations?
- The
has_many: through
association is the one-to-many equivalent to thebelongs_to
one-to-one association. - Both associations are identical, and
has_many: through
is maintained only for legacy purposes. - The
has_many
association is a one-to-many association, whilehas_many: through
is a one-to-one association that matches through a third model. - Both are one-to-many associations but with
has_many :through
, the declaring model can associate through a third model.
- Create an embedded Ruby file (.html.erb) and surround the Ruby code with
<% %>
. - Insert Ruby code inside standard HTML files and surround it with
<% %>
. The web server will handle the rest. - Create an embedded Ruby file (.html.erb) and surround the Ruby code with
<%= %>
. - Put the code in an .rb file and include it in a
<link>
tag of an HTML file.
-
<% render 'view_mobile' %>
-
<% render 'view', use_layout: 'mobile' %>
-
<% render 'view', layout: 'mobile' %>
-
<% render_with_layout 'view', 'mobile' %>
Q24. Given this controller code, which choice describes the expected behavior if parameters are submitted to the update action that includes values for the product's name, style, color, and price?
class ProductController < ActionController::Base
def update
@product = Product.find(params[:id])
if @product.update(product_params)
redirect_to(product_path(@product))
else
render('edit')
end
end
private
def product_params
params.require(:product).permit(:name, :style, :color)
end
end
- The product will not be updated and the edit template will be rendered.
- The product will not be updated and the controller will raise an ActiveModel::ForbiddenAttributes exception.
- The product will be updated with the values for name, style, and color, but the value for price will be ignored.
- The product will be updated with the values for name, style, color, and price.
Q25. A Rails project has ActiveRecord classes defined for Classroom and Student. If instances of these classes are related so that students are assigned the ID of one particular classroom, which choice shows the correct associations to define?
- A
class Classroom < ActiveRecord::Base
belongs_to :students, class_name: 'Student'
end
class Student < ActiveRecord::Base
belongs_to :classrooms, class_name: 'Classroom'
end
- B
class Student < ActiveRecord::Base
has_many :classrooms, dependent: true
end
class Classroom < ActiveRecord::Base
has_many :students, dependent: false
end
- C
class Student < ActiveRecord::Base
has_many :classrooms
end
class Classroom < ActiveRecord::Base
belongs_to :student
end
- D
class Classroom < ActiveRecord::Base
has_many :students
end
class Student < ActiveRecord::Base
belongs_to :classroom
end
Q26. Where should you put images, JavaScript, and CSS so that they get processed by the asset pipeline?
- app/static
- app/images
- app/assets
- app/views
Reference: RoR folder structure
Q27. If the Rails asset pipeline is being used to serve JavaScript files, how would you include a link to one of those JavaScript files in a view?
-
<script src="/main.js"></script>
-
<%= javascript_include_tag 'main' %>
-
<%= javascript_tag 'main' %>
-
<!-- include_javascript 'main' -->
- MemCacheStore, MongoDBStore, MemoryStore, and FileStore
- MemoryStore, FileStore, and CacheCacheStore
- MemoryStore, FileStore, MemCacheStore, RedisCacheStore, and NullStore
- MemoryStore, FileStore, MySQLStore, and RedisCacheStore
Q29. What is the correct way to generate a ProductsController with an index action using only the command-line tools bundled with Rails?
-
rails generate controller --options {name: "Products", actions: "index"}
-
rails generate controller --name Products --action index
-
rails generate controller Products index
-
rails generate ProductsController --actions index
Q30. If a model class is named Product, in which database table will ActiveRecord store and retrieve model instances?
-
product_table
-
all_products
-
products_table
-
products
Q31. What is a popular alternative template language for generating views in a Rails app that is focused on simple abstracted markup?
- Mustache
- Haml
- Liquid
- Tilt
Q32. When Ruby methods add an exclamation point at the end of their name (such as sort!
), what does it typically indicate?
- The method executes using "sudo" privileges.
- Any ending line return will be omitted from the result.
- The method will ignore exceptions that occur during execution.
- It is a more powerful or destructive version of the method.
class MyModel < ApplicationRecord
after_find :decrypt_data
end
-
MyModel.first.update(field: 'example')
-
MyModel.where(id: 42)
-
MyModel.first.destroy
-
MyModel.new(field: 'new instance')
Q34. Which Rails helper would you use in the application view to protect against CSRF (Cross-Site Request Forgery) attacks?
-
csrf_protection
-
csrf_helper
-
csrf_meta_tags
-
csrf
Q35. In the model User
you have the code shown below. When saving the model and model.is_admin
is set to true, which callback will be called?
before_save :encrypt_data, unless: ->(model) { model.is_admin }
after_save :clear_cache, if: ->(model) { model.is_admin }
before_destroy :notify_admin_users, if: ->(model) { model.is_admin }
-
encrypt_data
-
clear_cache
-
notify_admin_users
- None of these callbacks will be called when
is_admin
is true. [Explanation]: When saving the User model and model.is_admin is set to true, the after_save callback will be called.
The before_save callback with the unless: ->(model) { model.is_admin } condition will not be called because the is_admin attribute is true.
The before_destroy callback with the if: ->(model) { model.is_admin } condition will be called if the is_admin attribute is true and the record is being destroyed, but this is not relevant to the scenario of saving the User model.
Therefore, only the after_save callback with the if: ->(model) { model.is_admin } condition will be called in this scenario. This callback will be triggered after the record has been saved, if the is_admin attribute is true. In this case, the clear_cache method will be called.
- It filters out all parameters.
- It filters out submitted form parameters that are not named
:name
or:sku
to make forms more secure. - It raises an error if parameters that are not named
:name
or:sku
are found. - It raises an error if the
:name
and:sku
parameters are set tonil
.
Q37. Review the code below. Which Ruby operator should be used to fill in the blank so that the sort
method executes properly?
[5,8,2,6,1,3].sort {|v1,v2| v1 ___ v2}
-
=>
-
<==>
-
<=>
-
||
Q38. You made a spelling mistake while creating a table for bank accounts. Which code would you expect to see in a migration to fix the error?
- A
class IAmADummy < ActiveRecord::Migration
def change
rename_column :accounts, :account_hodler, :account_holder
end
end
- B
class FixSpellling < ActiveRecord::Migration
def change
rename :accounts, :account_hodler, :account_holder
end
end
- C
class CoffeeNeeded < ActiveRecord::Migration
def change
remove_column :accounts, :account_hodler
add_column :accounts, :account_holder
end
end
- D
class OopsIDidItAgain < ActiveRecord::Migration
def rename
:accounts, :account_hodler, :account_holder
end
end
<% check_box(:post, :visible) %>
- A
<input type="hidden" name="post[visible]" value="0" />
<input type="checkbox" name="post[visible]" value="1" />
- B
<checkbox name="post[visible]" value="1" />
- C
<input type="checkbox" name="post[visible]" value="1" data-default-value="0" />
- D
<input type="checkbox" name="post[visible]" value="1" />
Q40. There is a bug in this code. The logout message is not appearing on the login template. What is the cause?
class AccessController < ActionController::Base
def destroy
session[:admin_id] = nil
flash[:notice] = ""You have been logged out""
render('login')
end
- The string assigned to flash[:notice] will not be available until the next browser request.
- An instance variable should be used for flash[:notice]
- This is an invalid syntax to use to assign values to flash[:notice]
- The previous value of flash[:notice] will not be cleared automatically [Explanation]: The cause of the bug is a syntax error in the line that sets the value of the flash[:notice] message. The string literal "You have been logged out" is not properly enclosed in the surrounding string literal.
- Each database column requires adding a matching attr_accessor declaration in the ActiveRecord model.
- All attributes in an ActiveRecord model are read-only declared as writable using attr_accessible
- An instance of an ActiveRecord model will have attributes that match the columns in a corresponding database table.
- ActiveRecord models can have only attributes that have a matching database column
- A
$_SESSION['user_id'] = user.id
- B
@session ||= Session.new << user.id
- C
session_save(:user_id, user.id)
- D
session[:user_id] = user.id
@result = Article.first.tags.build(name: 'Urgent')
- either true or false
- an unsaved Tag instance
- a saved Tag instance
- an array of Tag instances
Q44. What is the correct syntax for inserting a dynamic title tag into the header of your page from within an ERB view template?
- A
<% render :head do %>
<title>My page title</title>
<% end %>
- B
<% content_for :head do %>
<title>My page title</title>
<% end %>
- C
<% render "shared/head, locals: {title: "My page title"} %>
- D
<% tield :head do %>
<title>My page title</title>
<% end %>
Q45. How would you validate that a project's name is not blank, is fewer than 50 characters, and is unique?
- A
class Project
validates :name, presence: true, length: { maximum: 50 }, uniqueness: true
end
- B
class Project
validate_attribute :name, [:presence, :uniqueness], :length => 1..50
end
- C
class Project
validate_before_save :name, [:presence, [:length, 50], :uniqueness], :length => 1..50
end
- D
class Project
validates_presense_of :name, :unique => true
validates_length_of :name, :maximum => 50
end
class Product << ApplicationRecord
____ :photo
end
- has_one_attached
- has_image
- attached_file
- acts_as_attachment
Q47. If the only route defined is resources :products, what is an example of a URL that could be generated by this link_to method?
link_to('Link', {controller: 'products', action: 'index', page: 3})
- A
/products?page=3
- B
/products/index/3
- C
/products/page/3
- D
/products/index/page/3
Q48. Which part of the Rails framework is primarily responsible for making decisions about how to respond to a browser request?
- view
- controller
- ActiveRecord
- model
- User.where(last_name: 'Smith')
- User.find_or_create(last_name: 'Smith')
- User.find_by_last_name('Smith')
- User.find('Smith')
- route "products/index", to: "products/index", via: :get
- match "products/index", to: "products#index", via: :get
- root "products/index"
- get "products/index"
Q51. Given a table of blog_posts and a related table of comments (comments made on each blog post), which ActiveRecord query will retrieve all blog posts with comments created during @range?
- BlogPost.joins (:comments).where(comments: {created_at: @range})
- BlogPost.where(['comments.created_at', @range])
- BlogPost.preload ("comments.created_at").where(created_at: @range)
- BlogPost.includes (:comments).where('comments.created_at' => @range)
Q52. Given this Category model with an attribute for "name", what code would fill in the blank so that it sets saved_name to a string that is the category name that existed before the name was changed?
class Category < ActiveRecord::Base
# has a database column for :name
end
category = Category.first
category.name = 'News'
saved_name = _____
- category.name_was
- category.saved(:name)
- category.changes[:name]
- category.name_changed?
class LineItem < ApplicationRecord
end
class Order < ApplicationRecord
has_many :line_items
end
Order.limit(3).each { |order| puts order.line_items }
- This query will result in extensive caching, and you will have to then deal with caching issues.
- This query will result in the N+1 query issue. Three orders will result in four queries.
- This query will result in the 1 query issue. Three orders will result in one query.
- There are no issues with this query, and you are correctly limiting the number of Order models that will be loaded.
-
<%= render(:partial => 'shared/product') %>
-
<%= render('shared/product', :collection => @products) %>
-
<%= render(template: 'shared/product', with: @products) %>
-
<%= render('shared/product', locals: { product: @product }) %>
Q55. Which code sample will skip running the login_required
"before" filter on the get_posts
controller action?
-
before_action :login_required, skip: [:get_posts]
-
skip_before_action :login_required, except: [:get_posts]
-
skip_before_action :login_required, only: [:get_posts]
-
skip_action before: :login_required, only: [:get_posts]
Q56. Within a Rails model with a cache_key
method, which code snippet will expire the cache whenever the model is updated?
- A
after_update_commit do
destroy
end
- B
after_destroy do
Rails.cache.delete(cache_key)
end
- C
after_update_commit do
Rails.cache.delete(cache_key)
end
- D
after_update_commit do
Rails.cache.destroy(cache_key)
end
class CreateGalleries < ActiveRecord::Migration
def change
create_table :galleries do |t|
t.string :name, :bg_color
t.integer :position
t.boolean :visible, default: false
t.timestamps
end
end
end
- The galleries table will have no primary key.
- The galleries table will include a column named "updated_at".
- The galleries table will contain exactly seven columns.
- The galleries table will have an index on the position column.
Q58. Which code would you add to return a 404 to the API caller if the user is not found in the database?
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, status: :ok,
# Missing code
end
- A
rescue => e
logger.info e
end
- B
rescue_from ActiveRecord::RecordNotFound, with: :render_not_found_response
- C
rescue ActiveRecord::RecordNotFound
render json: { message: 'User not found' }, status: :not_found
end
- D
raise ActiveRecord::RecordNotFound
render json: { message: 'User not found' }, status: :user_not_found
end
- model
- view
- web server
- router
-
<%= render partial: "nav", globals: {selected: "about"} %>
-
<%= render partial: "nav", local_variables: {selected: "about"} %>
-
<%= render partial: "nav", locals: {selected: "about"} %>
-
<%= render partial: "nav", selected: "about"} %>
Q61. Given this code, and assuming @user
is an instance of User
that has an assigned location, which choice would be used to return the user's city?
class Location < ActiveRecord::Base
# has database columns for :city, :state
has_many :users
end
class User < ActiveRecord::Base
belovngs_to :location
delegate :city, :state, to: :location, allow_nil: true, prefix: true
end
-
@user.user_city
-
@user.location_city
-
@user.city
-
@user.try(:city)
scope :active, lambda { where(:active => true) }
- an Active Record model
- an ActionView template
- an ApplicationHelper file
- an ActionController controller
- The models used for STI must mix in the module
ActiveRecord::STI
- All models used for STI must include "self.abstract_class=true".
- All database tables used for STI must be related to each other using a foreign key.
- The database table used for STI must have a column named "type".
- helper
- utility
- controller
- formatter
- Insert Ruby code inside standard HTML files and surround it with
<% %>
. The web server will handle the rest. - Create an embedded Ruby file
(.html.erb)
and surround the Ruby code with<% %>
- Put the code in
an.rb. file
and include it in a<link>
tag of an HTML file. - Create an embedded Ruby file
(.html.erb)
and surround the Ruby code with<%= %>
.
Q66.You are working with a large database of portfolios that sometimes have an associated image. Which statement best explains the purpose of includes(:image) in this code?
@portfolios = Portfolio.includes(:image).limit(20)
@portfolios.each do |portfolio|
puts portfolio.image.caption
end
- It preloads the images files using asset pipeline.
- It selects only portfolios that have an image attached.
- It includes the number of associated images when determining how many records to return.
- It will execute two database queries of 21 database queries.
- Rails Validation Model
- Rails Version Manager
- Rails View Model
- Ruby Version Manager
Q68. Which line of inquiry would you follow after receiving this error message: No route matches [POST] "/burrito/create"?
- Check that there is a matching path for "/burrito/create" in you paths.rb file.
- Check that there is a
post
route that matches "/burrito/create" in your routes.rb file. - Add the line
resources :burritos
to your routes.rb file. - Check that there is a
get
route that matches "burrito/create" in your paths.rb file.
- A
def show
if params[:detailed] == "1"
redirect_to(action: 'detailed_show')
end
render('show')
end
- B
def show
render('detailed_show') if params[:detailed] == "1"
render('show') and return
end
- C
def show
if params[:detailed] == "1"
render('detailed_show')
end
render('show')
end
- D
def show
if params[:detailed] == "1"
render('detailed_show')
end
end
Q70. Which keyword is used in a layout to identify a section where content from the view should be inserted?
- render
- puts
- view_content
- yield
Q71. Check the following Ruby code and replace __BLOCK__
with the correct code to achieve the result.
class TodoList
def initialize
@todos = []
end
def add_todo(todo)
@todos << todo
end
def __BLOCK__
@todos.map { |todo| "- #{todo}" }.join("\n")
end
work = TodoList.new
work.add_todo("Commit")
work.add_todo("PR")
work.add_todo("Merge")
puts work
=> - Commit
=> - PR
=> - Merge
- to_s
- work
- inspect
- str
- web server
- router
- view
- model
class UserController < ActionController::Base
def show
@user = User.find_by_id(session[:user_id])
@user ||= User.first
end
end
- The variable
@user
will be set to the object returned byUser.first
unlesssession[:user_id]
has a value. - The result of
User.find_by_id
is irrelevant because the variable@user
will always be set to the object returned byUser.first
. - If
User.find_by_id
does not raise an exception, the variable@user
will be set to the object returned byUser.first
. - If
User.find_by_id
returns nil or false, the variable@user
will be set to the object returned byUser.first
.
Reference #Assignment_Operators
Q74. When defining a resource route, seven routes are defined by default. Which two methods allow defining additional routes on the resource?
- only, except
- match, resolve
- action, path
- member, collection
<%= render partial: 'user_info', object: { name: 'user' } %>
-
<%= locals.user_info.name %>
-
<%= object.name %>
-
<%= object[:name] %>
-
<%= @user.name %>
<%= form_for(@category) do |f| %>
<%= f.text_field(:name) %>
<% end %>
-
params[:name]
-
@params.name
-
params.require(:category).permit(:name)
-
params[:category][:name]
class ProjectsController < ActionController::Base
def create
Project.create(project_params)
end
private
def project_params
# Missing line
end
end
-
params[:project].allow(:name, :visible, :description)
-
params[:project].allowed
-
params.permit(:project).allow(:name, :visible, :description)
-
params.require(:project).permit(:name, :visible, :description)
-
To create a new database for the Rails application.
-
To migrate the database schema to the latest version.
-
To seed the database with initial data.
-
To test the database connection.
class A
def self.get_self
self.class
end
def get_self
self
end
end
p "#{A.get_self.class} #{A.new.get_self.class}"
-
Class Class
-
A A
-
A Class
-
Class A
Q80. Given the following model class and view , which code snippet should you use to fetch the correct results, and avoid the N+1 query issue?
class Movies < ApplicationRecord
def recent_reviews
# Return the latest 10 reviews
end
end
<%= @movie.recent_reviews.each do |review| %>
<div>
<header><%= review.critic.name %></header>
<div><%= review.comment %></div>
</div>
<% end %>
-
@movie.reviews.order(created_at: :desc).limit(10)
-
@movie.reviews.joins(:critic).order(created_at: :desc).limit(10)
-
@movie.reviews.includes(:critic).order(created_at: :desc).limit(10)
-
@movie.reviews.references(:critic).order(created_at: :desc).limit(10)