Numerical Action Names

I have a controller for a product, and I want the actions to reflect the different models which are numbers. Simply using a number for the action name doesn't seem to work:

class ClickController < ApplicationController

  def index   end

  def 100   end

  def 200   end end

I also have this named route in my routes file:

map.click '/products/click/:action', :controller => 'click'

If I have a non-numeric value for action, this works fine. I use it for a different product ("command_path(:datacollector))"--which properly generates "/products/command/datacollector"). In Rails 1.2.x I was able to prepend the numeric action name with an underscore (i.e., _100, _200, etc.) and everything worked as expected. In Rails 2.0 this no longer works. Someone suggested I create a custom route:

map.click '/products/click/:model', :controller => 'click', :action => 'dispatch', :requirements => {:model => /\d{3}/}, :model => nil

I have a dispatch action in my controller:

def dispatch(model = nil)   if model.nil?     index     render(:action => 'index')   else     # whatever   end end

The else statement NEVER executes. I have tried the following paths:

/products/click /products/click/100 /products/click/200

Every path renders the index action.

What am I missing? What can I do?

Thanks.

I have a controller for a product, and I want the actions to reflect the different models which are numbers. Simply using a number for the action name doesn't seem to work:

actions are methods, method names can't start with a digi.

I also have this named route in my routes file:

map.click '/products/click/:action', :controller => 'click'

If I have a non-numeric value for action, this works fine. I use it for a different product ("command_path(:datacollector))"--which properly generates "/products/command/datacollector"). In Rails 1.2.x I was able to prepend the numeric action name with an underscore (i.e., _100, _200, etc.) and everything worked as expected. In Rails 2.0 this no longer works. Someone suggested I create a custom route:

map.click '/products/click/:model', :controller => 'click', :action => 'dispatch', :requirements => {:model => /\d{3}/}, :model => nil

Do you need the :model => nil ?

I have a dispatch action in my controller:

def dispatch(model = nil) if model.nil?    index    render(:action => 'index') else    # whatever end end

The else statement NEVER executes. I have tried the following paths:

/products/click /products/click/100 /products/click/200

model should materialize as params[:model], not as an argument to your
dispatch method.

Fred

"model should materialize as params[:model], not as an argument to your dispatch method."

Silly me. That was my mistake.

Thanks.

Next question is how do I dynamically execute an action? Here's what I mean: I have my dispatch action. If :model is nil, I execute then render the index action:

  def dispatch     if params[:model].nil?       index       render(:action => 'index')     else       action = "click_#{params[:model]}"       # execute action       render(:action => action)     end   end

At the moment, I'm setting some variables in my action that aren't available in my view. How do I get them there?

Thanks.

Next question is how do I dynamically execute an action? Here's what I mean: I have my dispatch action. If :model is nil, I execute then render the index action:

def dispatch    if params[:model].nil?      index      render(:action => 'index')    else      action = "click_#{params[:model]}"      # execute action      render(:action => action)    end end

You just need to call the method (eg via send)

Fred