Routes problem

Hi all,

In a sample project, I have a nested resource called ticket, and parent
resource called project.

rake routes:

project_tickets GET /projects/:project_id/tickets(.:format)
{:action=>“index”, :controller=>“tickets”}

            POST   /projects/:project_id/tickets(.:format)
                  {:action=>"create", :controller=>"tickets"}

but when I go to http://127.0.0.1:3000/projects/7/tickets/ I have this
routing error:

No route matches {:action=>“show”, :controller=>“tickets”,
:project_id=>nil, :id=>#<Project id: 7,
name: “bla…bla”, created_at: “2011-11-29 14:39:51”,
updated_at: “2011-11-29 14:39:51”>}

It invokes the show action and not the index action. Why?

On Dec 1, 11:28am, Vogon P. [email protected] wrote:

    POST  /projects/:project_id/tickets(.:format)

It invokes the show action and not the index action. Why?

It’s also doing weird stuff because it hasn’t picked a project_id from
the url but it has picked an id. Do you have any other routes that
might be matching this url instead of the ones that you intended to be
used?

Fred

Frederick C. wrote in post #1034554:

On Dec 1, 11:28am, Vogon P. [email protected] wrote:

    POST  /projects/:project_id/tickets(.:format)

It invokes the show action and not the index action. Why?

It’s also doing weird stuff because it hasn’t picked a project_id from
the url but it has picked an id. Do you have any other routes that
might be matching this url instead of the ones that you intended to be
used?

Fred

Hi Frederick,

I have only the standard REST routes generated by Rails, with

MyProject::Application.routes.draw do

get “projects/index”

root :to=> ‘projects#index’

resources :projects do
resources :tickets
end

in your path are you sending the project object as params?

2011/12/1 Vogon P. [email protected]

root :to=> ‘projects#index’
“Ruby on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.


thiagocifani

twitter.com/thiagocifani
del.icio.us/thiagocifani
http://del.icio.us/thiagocifani

Vogon P. wrote in post #1034547:

Hi all,

In a sample project, I have a nested resource called ticket, and parent
resource called project.

rake routes:

project_tickets GET /projects/:project_id/tickets(.:format)
{:action=>“index”, :controller=>“tickets”}

            POST   /projects/:project_id/tickets(.:format)
                  {:action=>"create", :controller=>"tickets"}

but when I go to http://127.0.0.1:3000/projects/7/tickets/ I have this
routing error:

No route matches {:action=>“show”, :controller=>“tickets”,
:project_id=>nil, :id=>#<Project id: 7,
name: “bla…bla”, created_at: “2011-11-29 14:39:51”,
updated_at: “2011-11-29 14:39:51”>}

It invokes the show action and not the index action. Why?

Ok, I am sorry but, it was my error . In index.html.erb I had

<%=link_to ticket.title,project_ticket_path(@project,@path)%>

this, on the contrary of what is present in some online RoR examples,
doesn’t work for me. I have changed it with

<%=link_to ticket.title,[@project,@path] %>

thiagocifani wrote in post #1034560:

in your path are you sending the project object as params?

2011/12/1 Vogon P. [email protected]

root :to=> ‘projects#index’
“Ruby on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.


thiagocifani
http://thiagocifani.wordpress.com/
twitter.com/thiagocifani
del.icio.us/thiagocifani
http://del.icio.us/thiagocifani

No, I am not sending the project object as param, perhaps looking at
tickets controller may be useful ?

class TicketsController < ApplicationController

before_filter :find_project, :only=>[:new,:create,:show,:index]

def find_project

begin
@project = Project.find(params[:project_id])
rescue ActiveRecord::RecordNotFound
flash[:error]=“The project you were looking for could not be
found”
redirect_to root_path
end

end

private :find_project

#__________________________

def new

 @ticket = @project.tickets.build
 @title="--New Ticket for #{@project.name}"

end

def create

   @ticket = @project.tickets.build(params[:ticket])

   if @ticket.save
      flash[:success]="Ticket has been created"
      redirect_to [@project,@ticket]
   else
       flash[:error]="Ticket has not been created"
       render 'new'
   end

end

#___________________________

def index

  @tickets = @project.tickets.all
  @title="--#{@project.name}--Tickets"

end

refactor later

def show
begin
@ticket = @project.tickets.find(params[:id])
rescue ActiveRecord::RecordNotFound

        flash[:error]="The ticket you were looking for could not be
                       found"
        redirect_to @project
        return
    end

   @title="--#{@project.name}--Show Ticket--#{@ticket.title}"

end

end