Reputation: 4975
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
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
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