mike21
(mike)
March 4, 2013, 4:32pm
1
I have a User model which has_many :portfolios and each Portfolio has_many :pictures. My routes look like this:
resources :users do
resources :portfolios do
resources :pictures
end
end
Then I try to create a new Portfolio like this:
<%= link_to “new portfolio…”, new_user_portfolio_path(current_user) %>
With a form like this:
<%= form_for [current_user, @portfolio ], html: { class: “form_settings” } do |f| %>
…
<% end %>
But when I click on “new portfolio…” my URL says /users/12/portfolios/new
and I get this error:
Routing Error
No route matches {:controller=>"pictures", :user_id=>#<User id: 12, name: "michael", password_digest: "d787f56b080945c1ec0b3343cbf962ca427bb8ef", remember_token: "dL4nPlt0E5azUMemNIvkdg", admin: false, created_at: "2013-03-03 01:18:19", updated_at: "2013-03-03 19:56:28">, :portfolio_id=>#<Portfolio id: nil, user_id: 12, name: nil, created_at: nil, updated_at: nil>}
Is that route in ‘rake routes’?
mike21
(mike)
March 4, 2013, 5:24pm
3
Ok, figured out a part of it. My layout file has a toolbar which looks like this:
<% current_user.portfolios.each do |portfolio| %>
<%= link_to portfolio.name, user_portfolio_path(current_user, portfolio) %>
<% end %>
<%= link_to "new portfolio...", new_user_portfolio_path(current_user) %>
Which works when I’m at /users/12 but it breaks when I go to /users/12/portfolios/new . So my question is why can’t I link to the show page of my portfolios from the new page?
mike21
(mike)
March 4, 2013, 5:25pm
4
yes, I checked all my routes against ‘rake routes’
From this it sounds like somewhere you're trying to link (or generate a form that posts to) the pictures for an unsaved portfolio. This doesn't work because te URL for that would have the portfolio id in it, but the portfolio in question doesn't have an id yet.
Fred
mike21
(mike)
March 4, 2013, 10:03pm
6
You know what, I posted the wrong error. The correct error is this:
No route matches {:action=>"show", :controller=>"portfolios", :user_id=>
What fixed it is this:
link_to portfolio.name, user_portfolio_path(current_user, portfolio) unless portfolio.new_record?
the unless portfolio.new_record? part. But I don’t understand why that fixed it?