ChrisWesAllen
ChrisWesAllen

Reputation: 4975

rails - Pass id parameter on a link_to

I'm trying to pass the parameter of the current page(id) to the next page so I can create a dependent model entry.

i.e. Projects have bids, bids belong to projects.

So on the show page for a project I added the link

<%= link_to "New Bid", new_bid_path(@project) %>

Which creates and performs the url.... "http://localhost:3000/bids/new.2"

I have

def new
    @bid = Bid.new
    @project =  Project.find(params[:id])
end

in the bids controller but I keep getting the error "Couldn't find Project without an ID"

???

Whats going on, how come I can't pass the id?

Upvotes: 26

Views: 39622

Answers (2)

BitOfUniverse
BitOfUniverse

Reputation: 6021

If your bids are not nested resource of the project, then you can add project_id as parameter to the path:

<%= link_to "New Bid", new_bid_path(:project => @project.id) %>

def new  
  @bid = Bid.new  
  @project =  Project.find(params[:project])  
end

otherwise:

#routes.rb

map.resources :projects do |project|  
  project.resources :bids
end

<%= link_to "New Bid", new_project_bid_path(@project) %>

def new  
  @project =  Project.find(params[:project_id])    
  @bid = @project.bids.build  
end  

Upvotes: 54

Gareve
Gareve

Reputation: 3391

A good approach to this kind of problems, its to see what are you sending with the params. This can be done with debug.

<%= debug params # or any variable%>

With that information you will see (and learn) what kind of params are you sending to a controller.

Upvotes: 4

Related Questions