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 |