render_with_view
Be explicit about the things you send from your Rails controller to the view.
Example
app/controllers/application_controller.rb:
class ApplicationController
include RenderWithView
endapp/controllers/home_controller.rb:
class HomeController < ApplicationController
def index
render_with_view posts: Post.all
end
endapp/views/home/index.html.erb:
<ul>
<% view.posts.each do |post| %>
<li><%= link_to post.title, post %></li>
<% end %>
</ul>Why not just use instance variables?
They feel like magic. Instead I like how this forces me to be explicit in what I send along to my templates. It's like a small step towards having a presenter/view layer (or whatever) but not going further than just adding the convention of using a single variable.
What's view?
An object with reader methods for every key in the hash you gave it. A HalfOpenStruct in a way.
Installation
Add render_with_view to your Gemfile:
gem 'render_with_view'Include it in your ApplicationController:
class ApplicationController
include RenderWithView
endBonus RSpec matcher
require 'render_with_view/rspec_matcher'
describe ThingController do
subject { get :index }
it { should set_view_local :key, optional_value }
endLicense
MIT