为什么rails控制台自动完成功能会显示对象没有的方法?如何截断它们形成定义的?

时间:2013-06-01 20:43:11

标签: ruby-on-rails-3.2 rails-console

例如,这是一个rails控制台会话。我使用tab密钥获取app的所有可用方法。但其中很多都不可能打电话:

irb(main):040:0> app.default
app.default                       app.default_executable=           app.default_locale                app.default_scoped?
app.default=                      app.default_external_encoding     app.default_locale=               app.default_scopes
app.default_action                app.default_external_encoding=    app.default_lockfile              app.default_scopes?
app.default_actions               app.default_form_builder          app.default_middleware_stack      app.default_separator
app.default_adapter               app.default_form_builder=         app.default_options               app.default_separator=
app.default_argv                  app.default_format                app.default_options=              app.default_sequence_name
app.default_argv=                 app.default_format=               app.default_port                  app.default_timezone
app.default_asset_host_protocol   app.default_format?               app.default_proc                  app.default_uri
app.default_asset_host_protocol=  app.default_formats               app.default_proc=                 app.default_url_options
app.default_charset               app.default_gem?                  app.default_regexp?               app.default_url_options=
app.default_charset=              app.default_gemfile               app.default_render                app.default_url_options?
app.default_dump_options          app.default_handlers              app.default_scope                 app.default_value
app.default_encoding              app.default_host                  app.default_scope=                app.defaults
app.default_engine                app.default_inspect               app.default_scoped
app.default_executable            app.default_load_options          app.default_scoped=

irb(main):043:0> app.default
NoMethodError: undefined method `default' for #ActionDispatch::Integration::Session:0x2e52208>
irb(main):042:0> app.default_lockfile
NoMethodError: undefined method `default_lockfile' for #ActionDispatch::Integration::Session:0x2e52208>
irb(main):041:0> app.default_locale
NoMethodError: undefined method `default_locale' for #ActionDispatch::Integration::Session:0x2e52208>

控制台说对象有它们,但如果被调用它们突然未定义。这是一个错误吗?如何只获得定义的?

1 个答案:

答案 0 :(得分:2)

rails控制台试图变得聪明,但事实并非如此。如果您想知道要调用哪些公共方法,请执行app.public_methods