Refactoring views ? Should public class methods be used in views?

I am refactoring my views and have learned that to separate view controller and models and that the view is feed from the controller that defines the instance variables related to a the models that is to be used in views- I have also learned that the number of inctace variables should be limited to 1-2 in each action.

My question is about how to handle public class methods. In some actions I have many such methods for objects as Person, User etc and I could either define instance variables (but there will then be to many) or specific presenters for these variables or putting them directly into the views to define i.e select_tags with different option lists

What solution is to be preferred ? select_tag(:person_id, options_for_select(@people_list.insert(0, ['Select a person',0]),@selected_person.to_s),... select_tag(:person_id, options_for_select(Person.all_people.insert(0, ['Select a person',0]),Person.current.to_s),.. select_tag(:person_id, options_for_select(PeoplePresenter.all_people.insert(0,['Select a person',0]),PeoplePresenter.current_person.to_s),.. etc

You should not use your models within your views. Use controller's instance variables in your views.

Thanks for the advice As that means a lot of controller instance variables I then had to define a presenter with methods calling public class methods as Person.all_people, Person.current etc

Thanks for the advice As that means a lot of controller instance variables I then had to define a presenter

I'm not sure what you mean with this, but you can use helper methods to clean up your views and make them easier to maintain.

with methods calling public class methods as Person.all_people, Person.current etc

I can't tell you about this, since that's just a matter of your application design.