Routing problem in Rails 2.x

Hi

I get this error:

Showing workouts/show.html.erb where line #14 raised:

undefined method `activities_path' for #<ActionView::Base:0x720828>
Extracted source (around line #14):

11:
12: <h1>Add an exercise to this Workout</h1>
13: <div id="submitArea" class="formEnd">
14: <% form_for(:activity, :url => activities_path(@workout)) do |f|
%>
15: <% render :partial => 'activities/form', :locals => {:f => f}%>
16: <% end %>
17: </div>

The top of my routes.rb looks like this:

ActionController::Routing::Routes.draw do |map|

  map.resources :workouts do |workout|
    workout.resources :activities
  end
.
.

Can anyone give me a clue about what I've done wrong?

Edward

Try for
<% form_for @activity do |form| %>

:slight_smile:

Bala

'Fraid that doesn't work. The 'add activity' is part of the Workout
show page and the @activity in your code is nil.

i thought an activity has_many workouts :frowning:

itz in the reverse way :slight_smile:

try for
<% form_for [@activity, @workout] do |form| %>

hope it will work
:slight_smile:

Bala

'fraid that doesnt work either.

NoMethodError in Workouts#show

Showing workouts/show.html.erb where line #15 raised:

undefined method `nil_class_workout_path' for #<ActionView::Base:0x1637cf8>

Extracted source (around line #15):

12: <h1>Add an activity to this Workout</h1>
13: <div id="submitArea" class="formEnd">
14: 15: <% form_for [@activity, @workout] do |f| %>
16: 17: <% render :partial => 'activities/form', :locals => {:f => f}%>
18: <% end %>

:o
Do u did before_filtter for the workut to load the activity???
if not so do that in this way
i assume the fallowing relation ship b/w models depending on ur routes
Model Workout
has_many :activities
Model Activity
belongs_to :workout
In the workout controller i assume
def new
@workout= Workout.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @workout}
end
end
def create
@workout= Workout.new(params[:workout])
respond_to do |format|
if @workout.save
format.html { redirect_to(@workout) }
format.xml { render :xml => @workout, :status => :created, :location => @workout}
else
format.html { render :action => “new” }
format.xml { render :xml => @workout.errors, :status => :unprocessable_entity }
end
end
end
in ur activity controller
before_filter :find_workout
def new
@activity= Activity.new
end
def create
@activity = Activity.new(params[:activity])
if (@workout.activities << @activity)
redirect_to workout_url(@workout)
else
render :action => :new
end
end
private
def find_workout
@workout_id = params[:workout_id]
return(redirect_to(workouts_url)) unless @workout_id
@workout= Workout.find(@workout_id)
end
and ur view file for activity/new
<% form_for [@workout, @activity] do |form| %>

Add an Activity

<%= render :partial => ‘form’, :object => form %>

<%= submit_tag "Create" %>

<% end %> **and the link for the new activity will be <%= link_to "Add Activity", new_workout_activity_url(@workout) %>** **and ur routes map.resources :workouts do |workout| workout.resources :activities end**

If still any issues :o let us know :slight_smile:

:slight_smile:

Bala Kishore

simply changing this

form_for(:activity, :url => activities_path(@workout))

to

form_for(:activity, :url => workouts_activities_path(@workout))

should work