Search code examples
ruby-on-rails-3url-routingrestful-url

Passing :new to Rails url_for


Maybe I'm stupid but Rails provides this nifty syntax for generating URL's like so:

url_for([user, comment]) # => /users/1/comment/1

Passing :edit allows me to create something like this:

url_for([:edit, user, comment]) # => /users/1/comment/1/edit

but is there some way to do following?

url_for([:new, user, comments]) # => NoMethodError: undefined method `new_user_comments_url'

UPDATE: Added more information.

My routes.rb:

resources :users do
  resources :comments
end

resources :posts do
  resources :comments
end

My problem here is, that I can't use Rails auto-generated url helper (user_comments_url), because I'm sharing the views for both user comments and post comments.

There are two workarounds (but no one feels like the "Rails"-way) for my problem:

  1. Adding logic to the view, e.g. some if conditions.

  2. Defining my own url helpers like new_parent_comment(user_or_blog).


Solution

  • Ok, found a solution, but I'm not sure if this is the intended one:

    url_for([:new, user, :comment]) # => '/users/1/comments/new'
    
    url_for([:new, post, :comment]) # => '/posts/1/comments/new'