Using views as a backend for rails

Ive been reading quite a few guides on this and my first attempt was not successful. What I have done so far is writern n a migration for the view and got that working:

class UpcommingEvents < ActiveRecord::Migration[5.1] def up self.connection.execute %Q( CREATE OR REPLACE VIEW upcoming_events AS SELECT v.name “Venue”, to_char(e.start_date,‘Day’) “Day”, e.start_time, e.title “Event”, e.description FROM events e, venues v WHERE v.id = e.venue_id AND e.start_date BETWEEN (CURRENT_DATE -INTERVAL ‘1 day’)::date AND (CURRENT_DATE + INTERVAL ‘7 day’)::date order by start_date, v.name ) end

def down execute “DROP VIEW upcoming_events” end end

Created a controller:

class CurrentEventsController < ApplicationController def index end end

And a Model

class CurrentEvent < ApplicationRecord end

And a View

<%= notice %>

Current_Events

<% current_event.each do |ce| %> <% end %>
Venue Day Start Time Event Description
<%= ce.venue %> <%= ce.day %> <%= ce.start_time %> <%= ce.event %> <%= ce.description %>

Bit when I add it as a route and browse to the page I get

NameError in

CurrentEvents#index

Showing /home/ben/eventpuddle/eventpuddle/rails/eventpuddle/app/views/current_events/index.html.erb where line #18 raised:

undefined local variable or method `current_event' for #<#<Class:0x007f64a41d4740>:0x007f648d40ba48>
Did you mean? current_events_index_url
Extracted source (around line **#18**      ):

17

18 <% current_event.each do |ce| %>

19

20 <%= ce.venue %>

21 <%= ce.day %>

Rails.root: /home/ben/eventpuddle/eventpuddle/rails/eventpuddle

I also added to ``config/application.rb

config.active_record.schema_format = :sql

and run '``rake db:migrate db:test:prepare'

Not sure where I am going wrong;(.


``


Just noticed and error in the view, should of been

<% @current_events.each do |ce| %>

Now getting a different error:

undefined method `each' for nil:NilClass

In your CurrentEvents controller’s index action you need to query for events, e.g.

class CurrentEventsController < ApplicationController def index @current_events = CurrentEvent.limit(100 end end

``

That is saying that you have tried to all each on an object that is nil, so that means @current_events is nil, which is not surprising as you have not set it anywhere. You need to setup @current_events to the events you want to show in index method of the controller. So something like def index   @current_events = CurrentEvent.all end

Colin

Thanks, that worked. how come all the other controllers index action for everything else are empty?

Thanks, that worked. how come all the other controllers index action for everything else are empty?

What is in the view for one of those index actions?

Colin