Strange thing with controller's helper method and method return value

1, why my helper method does not work
   I hava a controller named msg, and i define a method test(id) in /
app/helpers/msg_helper.rb
   but i can not use this method in /app/controllers/
msg_controller.rb.
   Can anyone tells me why ?Doedn't rails require msg_helper.rb for
me ?
2, how can i use a hash type variable returned by a method
  Because i can't use helper method, i write the method just in
msg_controller.rb
  like:
  :private
  def test(id)
    xx = {}
    xx[:test] = 1
    return xx
  end
  and i find xx i get via xx = test(id) is nil
  I think in ruby method hash type variable will be returned by
value(or maybe reference, but the variable will not out of scope)
  but why can i get the true value ?
Thanks very much~~
My enviroment:
  ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
  Rails 2.0.2
  oracle 10

1, why my helper method does not work
   I hava a controller named msg, and i define a method test(id) in /
app/helpers/msg_helper.rb
   but i can not use this method in /app/controllers/
msg_controller.rb.
   Can anyone tells me why ?Doedn't rails require msg_helper.rb for
me ?

A helper is simply a module containing methods that assist a view not
your controller. If you want make method for your controller and tobe
used to many controller you can put your method in application.rb

  and i find xx i get via xx = test(id) is nil

Sorry I not understand what do you mean on sentences above.

> 1, why my helper method does not work
> I hava a controller named msg, and i define a method test(id) in /
> app/helpers/msg_helper.rb
> but i can not use this method in /app/controllers/
> msg_controller.rb.
> Can anyone tells me why ?Doedn't rails require msg_helper.rb for
> me ?

A helper is simply a module containing methods that assist a view not
your controller. If you want make method for your controller and tobe
used to many controller you can put your method in application.rb

See a content I copy from "Agile Web Development with Rails 2nd" 18.1
Context and Dependencis
  Rails handles many configuration dependencies automatically; as a
developer
  you can normally rely on it to do the right thing. For example, if a
  request arrives for http://my.url/store/list, Rails will do the
following.
  1. Load the file store_controller.rb in the directory app/
controllers. (This
     loading takes place only once in a production environment).
  2. Instantiate an object of class StoreController.
@@@ 3. Look in app/helpers for a file called store_helper.rb. If
found, it is loaded
      and the module StoreHelper is mixed into the controller object.
  4. Look in the directory app/models for a model in the file store.rb
and
    load it if found.
Do you see 3 ? is rails 2.0.2 changes this ?

> and i find xx i get via xx = test(id) is nil

Sorry I not understand what do you mean on sentences above.

I mean , test(id) is supposed to renturn a hash with value {:text =>
1}
but actually , it returns nil or {}
You can have a simple test
Add this to one of your controller
  def test_action
      new = {}
      value = test_method
      new.merge(value)
      render :text => new[:text]
  end
  :private
   def test_method()
    value = {:text => 1}
    return value
   end
Then visit http://root/controller/test_action to see what it returns
Actually, 'value' returned by test_method is something like

flash: !map:ActionController::Flash::FlashHash
  :value: &id001
    :text: 1
  :value: *id001
I think new.merge(value) makes this
Can anyone tells me more details ?
Thanks!

1, why my helper method does not work
   I hava a controller named msg, and i define a method test(id)
in /
app/helpers/msg_helper.rb
   but i can not use this method in /app/controllers/
msg_controller.rb.
   Can anyone tells me why ?Doedn't rails require msg_helper.rb for
me ?

A helper is simply a module containing methods that assist a view not
your controller. If you want make method for your controller and tobe
used to many controller you can put your method in application.rb

See a content I copy from "Agile Web Development with Rails 2nd" 18.1
Context and Dependencis
Rails handles many configuration dependencies automatically; as a
developer
you can normally rely on it to do the right thing. For example, if a
request arrives for http://my.url/store/list, Rails will do the
following.
1. Load the file store_controller.rb in the directory app/
controllers. (This
    loading takes place only once in a production environment).
2. Instantiate an object of class StoreController.
@@@ 3. Look in app/helpers for a file called store_helper.rb. If
found, it is loaded
     and the module StoreHelper is mixed into the controller object.
4. Look in the directory app/models for a model in the file store.rb
and
   load it if found.

That's just wrong - it's never been like that.

Do you see 3 ? is rails 2.0.2 changes this ?

  and i find xx i get via xx = test(id) is nil

Sorry I not understand what do you mean on sentences above.

I mean , test(id) is supposed to renturn a hash with value {:text =>
1}
but actually , it returns nil or {}
You can have a simple test
Add this to one of your controller
def test_action
     new = {}
     value = test_method
     new.merge(value)

merge doesn't alter the hash, it returns a new hash with the merge
contents (merge! does an inplace merge)

Fred

emm...
Just basic knowledges...
I almost spent two hours on it ...
Thank you very much~~~