Simple proof of concept for keeping instance variables out of the views while also allowing for some reuse of variable declarations.
References:
Simple proof of concept for keeping instance variables out of the views while also allowing for some reuse of variable declarations.
References:
# Updated to use `locals` and a getter | |
class ItemsController < ApplicationController | |
# don't need before_action anymore | |
# | |
# before_action :set_item, only: [:show, :edit, :update, :destroy] | |
def index | |
render locals: { items: items } | |
end | |
def show | |
render locals: { item: item } | |
end | |
def new | |
render locals: { item: Item.new } | |
end | |
def edit | |
render locals: { item: item } | |
end | |
def create | |
self.item = Item.new(item_params) | |
if item.save | |
redirect_to item, notice: 'Item was successfully created.' | |
else | |
render :new, locals: { item: item } | |
end | |
end | |
def update | |
if item.update(item_params) | |
redirect_to item, notice: 'Item was successfully updated.' | |
else | |
render :edit, locals: { item: item } | |
end | |
end | |
def destroy | |
item.destroy | |
redirect_to items_url, notice: 'Item was successfully destroyed.' | |
end | |
end | |
private | |
def items | |
@item ||= Item.all | |
end | |
def item | |
@item ||= Item.find(params[:id]) | |
end | |
def item=(item) | |
@item = item | |
end | |
def item_params | |
params[:item] | |
end | |
end |
# Scaffolded controller | |
class ItemsController < ApplicationController | |
before_action :set_item, only: [:show, :edit, :update, :destroy] | |
def index | |
@items = Item.all | |
end | |
def show | |
end | |
def new | |
@item = Item.new | |
end | |
def edit | |
end | |
def create | |
@item = Item.new(item_params) | |
if @item.save | |
redirect_to @item, notice: 'Item was successfully created.' | |
else | |
render :new | |
end | |
end | |
def update | |
if @item.update(item_params) | |
redirect_to @item, notice: 'Item was successfully updated.' | |
else | |
render :edit | |
end | |
end | |
def destroy | |
@item.destroy | |
redirect_to items_url, notice: 'Item was successfully destroyed.' | |
end | |
end | |
private | |
def set_item | |
@item = Item.find(params[:id]) | |
end | |
def item_params | |
params[:item] | |
end | |
end |