mike
March 4, 2013, 5:33pm
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>}
mike
March 4, 2013, 6:22pm
2
Is that route in ‘rake routes’?
Greg A.
http://twitter.com/akinsgre
mike
March 4, 2013, 6:25pm
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?
mike
March 4, 2013, 6:26pm
4
yes, I checked all my routes against ‘rake routes’
mike
March 4, 2013, 11:04pm
5
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?
mike
March 4, 2013, 7:59pm
6
On Monday, March 4, 2013 4:32:10 PM UTC, mike wrote:
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>}
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