One of my routes is not working

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’?

Greg A.
http://twitter.com/akinsgre

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?

    yes, I checked all my routes against ‘rake routes’

    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?

    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