Ruby on Rails Wednesday, May 22, 2019

This is the error I get 'undefined method `fetch_value' for nil:NilClass'

MoorePark Results.png

This is what I ultimately want the page to look like See attacked picture


I have not include the last Database Table yet in my code. I know what the SQL statements look like. I just don't know how to do the select from the form and to get data to the Database and retrieve the results and display them

On Thursday, May 23, 2019 at 3:09:20 PM UTC+12, David Merrick wrote:
I am trying to Querying Multiple Database table and display results in races index.html.erb

Schema is this

ActiveRecord::Schema.define(version: 2019_05_21_043953) do

  create_table "days", force: :cascade do |t|
    t.date "day"
    t.integer "season_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["season_id"], name: "index_days_on_season_id"
  end

  create_table "races", force: :cascade do |t|
    t.boolean "display"
    t.text "racename"
    t.text "class"
    t.integer "season_id"
    t.integer "day_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["day_id"], name: "index_races_on_day_id"
    t.index ["season_id"], name: "index_races_on_season_id"
  end

  create_table "seasons", force: :cascade do |t|
    t.integer "year"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

A typical query in rails console --sandbox Querying all the races for that day

SELECT day,class,racename FROM RACES
INNER JOIN DAYS on days.id = races.day_id
INNER JOIN SEASONS on days.season_id = seasons.id
WHERE days.id = '46'

"2019-04-20" "Pee Wee" "Pee Wee Div 2"
"2019-04-20" "Pee Wee" "Pee Wee Div 1"
"2019-04-20" "Juniors" "Juniors Div 2 Shilo Tocher Cup"
"2019-04-20" "Juniors" "Juniors Div 1 Gavin Tavendale Cup"
"2019-04-20" "Solo" "Solo's Robin McKinnon Plate"
"2019-04-20" "Side Cars" "Sidecars Tony Schafer Cup"


I have this as the race model

class Race < ApplicationRecord
  belongs_to :season
  belongs_to :day

  class << self

  def with_season(seasons)
  joins(:seasons).where(seasons: {id: seasons})
  end

  def with_day(days)
  joins(:days).where(days: {id: days})
  end 

  def with_race(races)
  joins(:races).where(races: {id: races})
  end
  end
end

I want to select the Season ,the day and the race

with something like this in races index.html.erb

<div class="control-group">
  <%= f.label :day_id , class: 'control-label' %>
  <div class='controls'>
    <%= collection_select(:race, :day_id, Day.all, :id, :day, {}, {:multiple => false}) %>
  </div>
</div>

So far I have this for races index.html.erb

<p id="notice"><%= notice %></p>

<h1>Races</h1>

<table>
  <thead>
    <tr>
      <th>Display</th>
      <th>Racename</th>
      <th>Class</th>
      <th>Season</th>
      <th>Day</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    @races = Race.with_season(params[:season_id]).with_day(params[:day_id]).with_race(params[:_id])
    <% @races.each do |race| %>
      <tr>
        <td><%= race.display %></td>
        <td><%= race.racename %></td>
        <td><%= race.class %></td>
        <td><%= race.season %></td>
        <td><%= race.day %></td>
        <td><%= link_to 'Show', race %></td>
        <td><%= link_to 'Edit', edit_race_path(race) %></td>
        <td><%= link_to 'Destroy', race, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Race', new_race_path %>

Any Questions or suggestions just post please


Cheers Dave

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/4826d939-50b5-4ebe-aa29-1b224849ded6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment