One to Many help

I’m new to Ruby on Rails. I have two tables defined as
Table 1 - Leagues
id primary key - autonum
txtLeagueName

Table 2 - Divisions
id primary key - autonum
league_id
txtDivisionName

I can add a League fine but when I try and add a division I get the
error:
“Couldn’t find League without an ID”

I’ve defined the League table with ‘has_many :divisions’
I’ve defined the Division table with ‘belongs_to :league’

Here’s a snippet from my divison new.rhtml

Division Name

You can see I have included league_id as an input field and have passed
the value
as a parameter in the url.(which is working fine, it shows up in the
input field).
When I click on the save button, that’s when I get the error above.
I’m not sure
what it’s trying to tell me let alone what to do to fix it.

Is your league_id defined as a foreign key?

It seems like it’s complaining about not finding the league - are you
trying to find the league in your new method of your controller? I
would assume in the new method you would have something like

@league=League.find(params[:league_id])

What file is the error referring to, the form or the controller?

I do have league_id setup as a foreign key.

It’s complaining about my division controller. I do have what you
mention regarding the league parm. Here is a copy of the controller.

class DivisionController < ActionController::Base
layout “division-layout”
scaffold :division

before_filter :initLeague

def index
list
render_action ‘list’
end

def new
@division = @league.divisions.new
end

def list
@divisions = @league.divisions.find_all
end

def show
@division = @league.divisions.find(params[:id])
end

private
def initLeague
@league = League.find(params[:league_id])
@league_name = @league.txtLeagueName
end
end

David F. wrote:

private
def initLeague
@league = League.find(params[:league_id])
@league_name = @league.txtLeagueName
end
end

I think the problem lies in initLeague, where you are passing league_id
as a parameter in the URL it is fine yes? However when you submit the
form, to get the league ID you will have to get
params[:division][:league_id].

I don’t think its a good idea calling initLeague in before_filter, you
would be better calling it from within the controller methods where it
is needed.

I’d add to that by saying that not all of those methods will actually
have a league_id passed as a param, so the before_filter will fail
often.

A.

private
def initLeague
@league = League.find(params[:league_id])
@league_name = @league.txtLeagueName
end
end

I think the problem lies in initLeague, where you are passing league_id
as a parameter in the URL it is fine yes? However when you submit the
form, to get the league ID you will have to get
params[:division][:league_id].

I don’t think its a good idea calling initLeague in before_filter, you
would be better calling it from within the controller methods where it
is needed.