Forum: Ruby on Rails Having two paths for a single action with different parameters

Posted by Sumit Srivastava (Guest)
on 2012-11-28 09:43
(Received via mailing list)
Hi,

I have a controller named users and index action in it. By default I 
have
the path

get '/users' => 'users#index', :as => 'users'

Now I want to create one more path with a different parameter being 
passed

get '/users/:city' => 'users#index', :as => 'list_users'

But this gives as error, No route matches {:controller=>"users"}.

I ran rake routes and found the path I defined to be present over there 
but
it doesn't works.

What shall be done to make this work.
Posted by Jordon Bedwell (Guest)
on 2012-11-28 09:55
(Received via mailing list)
On Wed, Nov 28, 2012 at 2:42 AM, Sumit Srivastava
<sumit.theinvincible@gmail.com> wrote:
>
> But this gives as error, No route matches {:controller=>"users"}.
>
> I ran rake routes and found the path I defined to be present over there but
> it doesn't works.
>
> What shall be done to make this work.

I've no experience with routes exactly like that (considering to me it
seems illogical) but maybe Rails see the same broken logic, in that
you are trying to define two routes to same action when one route
/should/ be a /one action/ have you tried creating a new action in
your controller and seeing if the error still happens?  Example: "get
"/users/:city" => "users#by_city", :as => "by_city" but since I've not
seen the entire error and just what rails reports at the top are you
sure UsersController has index? Are you sure it's not User instead of
Users (I don't quite remember of Rails will do the plural game on
routes like it does with tables via ActiveRecord.)
Posted by sumit srivastava (Guest)
on 2012-11-28 09:58
(Received via mailing list)
Yes, I did try this but it didn't. In fact, the custom route I defined, 
if
I define it as following it works.

get '/users' => 'users#index', :as => 'list_users'

But as soon as I define the extra parameter with it, it fails. Same with
defining a new action.

Regards
Sumit Srivastava

The power of imagination makes us infinite...
Posted by Jim ruther Nill (jimboker)
on 2012-11-28 09:58
(Received via mailing list)
On Wed, Nov 28, 2012 at 4:42 PM, Sumit Srivastava <
sumit.theinvincible@gmail.com> wrote:

>
> But this gives as error, No route matches {:controller=>"users"}.
>

Where do you get this error?  How are you calling the route?  Do you get
the error
if you go to localhost:3000/users/my_city?  I don't see any error with 
this
route.
show the code that produces the error and we'll go from there.

Btw, you should be able to call that route like this

list_users_path('my_city')


> To unsubscribe from this group, send email to
> rubyonrails-talk+unsubscribe@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-talk/-....
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



--
Posted by Jordon Bedwell (Guest)
on 2012-11-28 10:01
(Received via mailing list)
On Wed, Nov 28, 2012 at 2:57 AM, sumit srivastava
<sumit.theinvincible@gmail.com> wrote:
> Yes, I did try this but it didn't. In fact, the custom route I defined, if I
> define it as following it works.
>
> get '/users' => 'users#index', :as => 'list_users'
>
> But as soon as I define the extra parameter with it, it fails. Same with
> defining a new action.

Is there anyway you can send us the entire trace to look at? You can
post it to a github gist so you can delete it after a while if you
need to, but it would be nice to see the actual trace so we can see
what where is going on and advise you better.
Posted by sumit srivastava (Guest)
on 2012-11-28 10:18
(Received via mailing list)
I just found that the value I was passing had a "." in it. And somehow 
this
was creating problem. Not sure why. I experimented with other special
characters and also by removing any of it and it started working fine.



The power of imagination makes us infinite...
Posted by Jordon Bedwell (Guest)
on 2012-11-28 10:21
(Received via mailing list)
On Wed, Nov 28, 2012 at 3:17 AM, sumit srivastava
<sumit.theinvincible@gmail.com> wrote:
> I just found that the value I was passing had a "." in it. And somehow this
> was creating problem. Not sure why. I experimented with other special

Add "value: /.*/" to the end of the /users/:city route.
Posted by sumit srivastava (Guest)
on 2012-11-28 10:27
(Received via mailing list)
Thanks a lot. It worked but with slight modification.

I used,

:constraints => { :city => /.*/ }

Regards
Sumit Srivastava

The power of imagination makes us infinite...
Posted by rahul chandra (Guest)
on 2012-11-28 11:03
(Received via mailing list)
well for understanding, If you add a symbol like(:city) in the routes it
takes that as a variable and whenever you call that route you have to 
pass
a variable like "*list_users_path(:city)*" or *"/users/(:city)".*
Posted by sumit srivastava (Guest)
on 2012-11-28 11:10
(Received via mailing list)
Thanks Rahul. If possible could you explain any more cases as I faced. 
It
would be helpful.

Regards
Sumit Srivastava

The power of imagination makes us infinite...
Posted by rahul chandra (Guest)
on 2012-11-28 12:35
(Received via mailing list)
sure! no problem.

On Wednesday, November 28, 2012, sumit srivastava wrote:

> > wrote:
>>>
>>> But this gives as error, No route matches {:controller=>"users"}.
>> .
>
>
>


--
Thanks & Regards
*Rahul Chandra, Software Developer*
MangoSense.Inc
+91 9890252428
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.