# Routing problem in Rails 2.x

**URL:** <https://www.ruby-forum.com/t/routing-problem-in-rails-2-x/148115>\
**Category:** Rails\
**Created:** [September 9, 2008, 1:27pm UTC](https://www.ruby-forum.com/t/routing-problem-in-rails-2-x/148115 "2008-09-09T13:27:58Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![countbrass](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc29f/32.png) [@countbrass](https://www.ruby-forum.com/u/countbrass)\
**Post date:** [September 9, 2008, 1:27pm UTC](https://www.ruby-forum.com/t/routing-problem-in-rails-2-x/148115/1 "2008-09-09T13:27:58Z")

</div>

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:

# Add an exercise to this Workout
  
13: 
  
14: \<% form\_for(:activity, :url =\> activities\_path(@workout)) do |f|  
%\>  
15: \<% render :partial =\> ‘activities/form’, :locals =\> {:f =\>  
f}%\>  
16: \<% end %\>  
17: 

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

---

<div class="post-metadata">

**Author:** ![countbrass](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc29f/32.png) [@countbrass](https://www.ruby-forum.com/u/countbrass)\
**Post date:** [September 9, 2008, 1:42pm UTC](https://www.ruby-forum.com/t/routing-problem-in-rails-2-x/148115/2 "2008-09-09T13:42:37Z")

</div>

Try for  
\<% form\_for @activity do |form| %\>

🙂

Bala

---

<div class="post-metadata">

**Author:** ![countbrass](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc29f/32.png) [@countbrass](https://www.ruby-forum.com/u/countbrass)\
**Post date:** [September 9, 2008, 2:03pm UTC](https://www.ruby-forum.com/t/routing-problem-in-rails-2-x/148115/3 "2008-09-09T14:03:48Z")

</div>

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

On Sep 9, 12:41 pm, “bala kishore pulicherla” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![countbrass](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc29f/32.png) [@countbrass](https://www.ruby-forum.com/u/countbrass)\
**Post date:** [September 9, 2008, 3:11pm UTC](https://www.ruby-forum.com/t/routing-problem-in-rails-2-x/148115/4 "2008-09-09T15:11:52Z")

</div>

'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:

# Add an activity to this Workout
  
13: 
  
14:  
15: \<% form\_for [@activity, @workout] do |f| %\>  
16:  
17: \<% render :partial =\> ‘activities/form’, :locals =\> {:f =\>  
f}%\>  
18: \<% end %\>

---

<div class="post-metadata">

**Author:** ![countbrass](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc29f/32.png) [@countbrass](https://www.ruby-forum.com/u/countbrass)\
**Post date:** [September 9, 2008, 2:10pm UTC](https://www.ruby-forum.com/t/routing-problem-in-rails-2-x/148115/5 "2008-09-09T14:10:16Z")

</div>

i thought an activity has\_many workouts ☹

itz in the reverse way 🙂

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

hope it will work  
🙂

Bala

---

<div class="post-metadata">

**Author:** ![countbrass](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc29f/32.png) [@countbrass](https://www.ruby-forum.com/u/countbrass)\
**Post date:** [September 9, 2008, 3:30pm UTC](https://www.ruby-forum.com/t/routing-problem-in-rails-2-x/148115/6 "2008-09-09T15:30:40Z")

</div>

: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 🙂

🙂  
Bala Kishore

---

<div class="post-metadata">

**Author:** ![countbrass](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc29f/32.png) [@countbrass](https://www.ruby-forum.com/u/countbrass)\
**Post date:** [September 11, 2008, 1:41pm UTC](https://www.ruby-forum.com/t/routing-problem-in-rails-2-x/148115/7 "2008-09-11T13:41:16Z")

</div>

simply changing this

form\_for(:activity, :url =\> activities\_path(@workout))

to

form\_for(:activity, :url =\> workouts\_activities\_path(@workout))

should work
