the :id symbol

hi,all

recently,i use the :id to pass parameter between of controllers or
actions.

but,when i wanna use the

"options_from_collection_for_select($cache_keshi,:id,:title)"

it is error cos the array variable($cache_keshi) has the column which
is primary key in the tabel,and the name is the same as the parameter
symbol in url route( /:controller/:action/:id).

is there any better idea to slove the problem?

btw,i have tried the quoted literal "id",it doesnt work also.

thanks

hi,all

recently,i use the :id to pass parameter between of controllers or
actions.

but,when i wanna use the

"options_from_collection_for_select($cache_keshi,:id,:title)"

it is error cos the array variable($cache_keshi) has the column which
is primary key in the tabel,and the name is the same as the parameter
symbol in url route( /:controller/:action/:id).

That shouldn't be a problem - i've done that loads of times. (oh and
you do know that $cache_keshi means 'global varible in ruby').
If you can expand a little more on what you are doing and what is
going wrong I'm sure someone can point you in the right direction.

Fred

oh,sorry to my omit.

when i use the "
options_from_collection_for_select($cache_keshi,:id,:title)"

it always prompt the error as following:

stack level too deep

Extracted source (around line #14):

11: <td>
12: <form name="form1">
13: <div align="justify">
14: <%=select_tag "科
室:",options_from_collection_for_select($cache_keshi,:id,:title)%>
15: <% puts $cache_keshi%>
16: </div>
17: </form></td>

but, when i change the :id to other column,such as :title.

options_from_collection_for_select($cache_keshi,:title,:title)

it works fine.

i just dont know why the :id symbol doesnt work.

thanks again.

the error is a bit strange

"stack level" would tell you, that some method
is called recursively over and over again,
until ruby runs out of stack.

i can't see any reason for this here,
but may be found in the model
(difficult to find error, but maybe that's of help)

this is the details of error:

Showing shared/_top.html.erb where line #14 raised:

stack level too deep

Extracted source (around line #14):

11: <td>
12: <form name="form1">
13: <div align="justify">
14: <%=select_tag "科
室:",options_from_collection_for_select($cache_keshi,:id,:title)%>
15: <% puts $cache_keshi%>
16: </div>
17: </form></td>

Trace of template inclusion: /layouts/application.html.erb

RAILS_ROOT: D:/ror_app/doctor

Application Trace | Framework Trace | Full Trace
c:/ruby/lib/ruby/1.8/set.rb:89:in `empty?' c:/ruby/lib/ruby/gems/1.8/
gems/activerecord-2.0.2/lib/active_record/attribute_methods.rb:56:in
`generated_methods?' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/
lib/active_record/attribute_methods.rb:186:in `method_missing' c:/ruby/
lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/
attribute_methods.rb:194:in `method_missing' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_view/helpers/form_options_helper.rb:
181:in `send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_view/helpers/form_options_helper.rb:181:in
`options_from_collection_for_select' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/helpers/form_options_helper.rb:180:in
`map' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
helpers/form_options_helper.rb:180:in
`options_from_collection_for_select' app/views/shared/_top.html.erb:
14:in `_run_erb_47app47views47shared47_top46html46erb' app/views/
layouts/application.html.erb:1:in
`_run_erb_47app47views47layouts47application46html46erb' -e:2:in
`load'-e:2
c:/ruby/lib/ruby/1.8/set.rb:89:in `empty?' c:/ruby/lib/ruby/gems/1.8/
gems/activerecord-2.0.2/lib/active_record/attribute_methods.rb:56:in
`generated_methods?' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/
lib/active_record/attribute_methods.rb:186:in `method_missing' c:/ruby/
lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/
attribute_methods.rb:194:in `method_missing' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_view/helpers/form_options_helper.rb:
181:in `send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_view/helpers/form_options_helper.rb:181:in
`options_from_collection_for_select' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/helpers/form_options_helper.rb:180:in
`map' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
helpers/form_options_helper.rb:180:in
`options_from_collection_for_select' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/base.rb:637:in `send' c:/ruby/lib/
ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/base.rb:637:in
`compile_and_render_template' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/base.rb:365:in `render_template' c:/
ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/base.rb:
316:in `render_file' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/
lib/action_view/base.rb:331:in `render' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/partials.rb:117:in `render_partial'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:26:in `benchmark' c:/ruby/lib/ruby/1.8/benchmark.rb:
293:in `measure' c:/ruby/lib/ruby/1.8/benchmark.rb:307:in `realtime'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:26:in `benchmark' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/partials.rb:116:in `render_partial'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:352:in `render' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/base.rb:637:in `send' c:/ruby/lib/
ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/base.rb:637:in
`compile_and_render_template' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/base.rb:365:in `render_template' c:/
ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/base.rb:
316:in `render_file' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/
lib/action_controller/layout.rb:268:in `render_without_benchmark' c:/
ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:51:in `render' c:/ruby/lib/ruby/1.8/benchmark.rb:
293:in `measure' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/benchmarking.rb:51:in `render' c:/ruby/lib/ruby/gems/
1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1153:in
`default_render' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/base.rb:1159:in `perform_action_without_filters' c:/
ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
filters.rb:697:in `call_filters' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/filters.rb:689:in
`perform_action_without_benchmark' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in
`perform_action_without_rescue' c:/ruby/lib/ruby/1.8/benchmark.rb:
293:in `measure' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/benchmarking.rb:68:in
`perform_action_without_rescue' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/rescue.rb:199:in
`perform_action_without_caching' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/caching.rb:678:in
`perform_action' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/connection_adapters/abstract/query_cache.rb:33:in
`cache' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/query_cache.rb:8:in `cache' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_controller/caching.rb:677:in
`perform_action' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/base.rb:524:in `send' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/base.rb:524:in
`process_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/filters.rb:685:in
`process_without_session_management_support' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_controller/session_management.rb:
123:in `process' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/base.rb:388:in `process' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:171:in
`handle_request' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/dispatcher.rb:115:in `dispatch' c:/ruby/lib/ruby/
gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:
126:in `dispatch_cgi' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/
lib/action_controller/dispatcher.rb:9:in `dispatch' c:/ruby/lib/ruby/
gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:112:in
`handle_dispatch' c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/
webrick_server.rb:78:in `service' c:/ruby/lib/ruby/1.8/webrick/
httpserver.rb:104:in `service' c:/ruby/lib/ruby/1.8/webrick/
httpserver.rb:65:in `run' c:/ruby/lib/ruby/1.8/webrick/server.rb:
173:in `start_thread' c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in
`start' c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start' c:/ruby/lib/ruby/
1.8/webrick/server.rb:92:in `each' c:/ruby/lib/ruby/1.8/webrick/
server.rb:92:in `start' c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in
`start' c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start' c:/ruby/
lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:62:in
`dispatch' c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/
servers/webrick.rb:66 c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:27:in `gem_original_require' c:/ruby/lib/ruby/
site_ruby/1.8/rubygems/custom_require.rb:27:in `require' c:/ruby/lib/
ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/
dependencies.rb:496:in `require' c:/ruby/lib/ruby/gems/1.8/gems/
activesupport-2.0.2/lib/active_support/dependencies.rb:342:in
`new_constants_in' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/
lib/active_support/dependencies.rb:496:in `require' c:/ruby/lib/ruby/
gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39 c:/ruby/lib/ruby/
site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require' script/server:3
c:/ruby/lib/ruby/1.8/set.rb:89:in `empty?' c:/ruby/lib/ruby/gems/1.8/
gems/activerecord-2.0.2/lib/active_record/attribute_methods.rb:56:in
`generated_methods?' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/
lib/active_record/attribute_methods.rb:186:in `method_missing' c:/ruby/
lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/
attribute_methods.rb:194:in `method_missing' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_view/helpers/form_options_helper.rb:
181:in `send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_view/helpers/form_options_helper.rb:181:in
`options_from_collection_for_select' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/helpers/form_options_helper.rb:180:in
`map' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
helpers/form_options_helper.rb:180:in
`options_from_collection_for_select' app/views/shared/_top.html.erb:
14:in `_run_erb_47app47views47shared47_top46html46erb' c:/ruby/lib/
ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/base.rb:637:in
`send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:637:in `compile_and_render_template' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_view/base.rb:365:in `render_template'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:316:in `render_file' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/base.rb:331:in `render' c:/ruby/lib/
ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/partials.rb:117:in
`render_partial' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/benchmarking.rb:26:in `benchmark' c:/ruby/lib/ruby/
1.8/benchmark.rb:293:in `measure' c:/ruby/lib/ruby/1.8/benchmark.rb:
307:in `realtime' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/benchmarking.rb:26:in `benchmark' c:/ruby/lib/ruby/
gems/1.8/gems/actionpack-2.0.2/lib/action_view/partials.rb:116:in
`render_partial' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_view/base.rb:352:in `render' app/views/layouts/
application.html.erb:1:in
`_run_erb_47app47views47layouts47application46html46erb' c:/ruby/lib/
ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/base.rb:637:in
`send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:637:in `compile_and_render_template' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_view/base.rb:365:in `render_template'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_view/
base.rb:316:in `render_file' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/layout.rb:268:in
`render_without_benchmark' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/benchmarking.rb:51:in `render'
c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' c:/ruby/lib/ruby/
gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:
51:in `render' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/base.rb:1153:in `default_render' c:/ruby/lib/ruby/
gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1159:in
`perform_action_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/filters.rb:697:in
`call_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/filters.rb:689:in `perform_action_without_benchmark'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:68:in `perform_action_without_rescue' c:/ruby/lib/ruby/
1.8/benchmark.rb:293:in `measure' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in
`perform_action_without_rescue' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/rescue.rb:199:in
`perform_action_without_caching' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/caching.rb:678:in
`perform_action' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/connection_adapters/abstract/query_cache.rb:33:in
`cache' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/query_cache.rb:8:in `cache' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_controller/caching.rb:677:in
`perform_action' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/base.rb:524:in `send' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/base.rb:524:in
`process_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/filters.rb:685:in
`process_without_session_management_support' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_controller/session_management.rb:
123:in `process' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/base.rb:388:in `process' c:/ruby/lib/ruby/gems/1.8/
gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:171:in
`handle_request' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/dispatcher.rb:115:in `dispatch' c:/ruby/lib/ruby/
gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:
126:in `dispatch_cgi' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/
lib/action_controller/dispatcher.rb:9:in `dispatch' c:/ruby/lib/ruby/
gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:112:in
`handle_dispatch' c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/
webrick_server.rb:78:in `service' c:/ruby/lib/ruby/1.8/webrick/
httpserver.rb:104:in `service' c:/ruby/lib/ruby/1.8/webrick/
httpserver.rb:65:in `run' c:/ruby/lib/ruby/1.8/webrick/server.rb:
173:in `start_thread' c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in
`start' c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start' c:/ruby/lib/ruby/
1.8/webrick/server.rb:92:in `each' c:/ruby/lib/ruby/1.8/webrick/
server.rb:92:in `start' c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in
`start' c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start' c:/ruby/
lib/ruby/gems/1.8/gems/rails-2.0.2/lib/webrick_server.rb:62:in
`dispatch' c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/
servers/webrick.rb:66 c:/ruby/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:27:in `gem_original_require' c:/ruby/lib/ruby/
site_ruby/1.8/rubygems/custom_require.rb:27:in `require' c:/ruby/lib/
ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/
dependencies.rb:496:in `require' c:/ruby/lib/ruby/gems/1.8/gems/
activesupport-2.0.2/lib/active_support/dependencies.rb:342:in
`new_constants_in' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/
lib/active_support/dependencies.rb:496:in `require' c:/ruby/lib/ruby/
gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39 c:/ruby/lib/ruby/
site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require' script/server:3-e:2:in `load'-e:2
Request
Parameters:

{"keshi"=>"2"}

Show session dump

this is the details of error:

Showing shared/_top.html.erb where line #14 raised:

I'm going to go out on a limb and say it's because you're using a
global variable. WHen you load the page the second time, the global
variable is still hanging onto the old class that was destroyed by the
class reloading that happens after request, and so bad stuff happens.

Fred.

hang onto old class?

can you provide more details?

but,when i changed it to :

<
%=select_tag("",options_from_collection_for_select($cache_keshi,:title,:title))
%>

it works.why? i just replace the :id with :title.

hang onto old class?

can you provide more details?

Rails reloads classes after each request in development mode, you've
got a global variable so weird stuff can happen.

Fred

oh,it work fine in the production mode. :slight_smile:

but,i have some coufusions.

i set and assign the global variable in the initializar/load_keshi.rb
file.as following:
$cache_keshi=Keshi.find(:all)
then in the view,i use the

options_from_collection_for_select($cache_keshi,"id","title")

.

it is just a variable,not class,what is the diff between the
development and production mode to the global variable?

and why the error info is "stack level too deep "?and why it works
when i change "id" to "title"?(maybe it does matter with the primary
key??)

thanks much for your help

oh,it work fine in the production mode. :slight_smile:

but,i have some coufusions.

i set and assign the global variable in the initializar/load_keshi.rb
file.as following:
$cache_keshi=Keshi.find(:all)
then in the view,i use the

options_from_collection_for_select($cache_keshi,"id","title")

.

it is just a variable,not class,what is the diff between the
development and production mode to the global variable?

Because in production mode classes aren't reloaded. Yes it's just an
array, but this array contains objects and those objects refer back to
their class.

and why the error info is "stack level too deep "?and why it works
when i change "id" to "title"?(maybe it does matter with the primary
key??)

What i've been trying to say is that if you do stuff like this, weird
and unpredictable things happen. The fact that it does not happen in
production mode only confirms this. Using a global variable like this
is a bad idea.
You're be far better off (if this is really necessary) having a static
method on the Keshi class that caches things.
Fred