Help needed to DRY helpers and proper MVC with Ruby


#1

Hello.

I’ve got working code, but I don’t think that it’s done properly so any
help to make this more efficient and most of all, correct, would be so
very appreciated.

In my users_helper.rb file

def generate_sub_nav
if session[:user]
sub_nav_menu = []
user = User.find(session[:user])
for role in user.roles
for right in role.rights
if right.on_menu
sub_nav_menu << right.id
end
end # for right
end # for role
end # if
sub_nav_menu.sort!
end # def

In my application_helper.rb file for the layout and display

def show_sub_nav(rights)
html_out = ‘

for right in rights
right_array = Right.find(:all, :conditions => [“id = ?”, right])
for menu in right_array
html_out << link_to_unless_current (menu.name,
:controller => menu.controller, :action => menu.action)
end
end #for right in rights

html_out << ‘


html_out
end

In my controllers (not including the user_controller)

helper :users

There’s got to be a better, more Ruby like way to do this.

THANKS!


#2

I’ve got working code, but I don’t think that it’s done
properly so any help to make this more efficient and most of
all, correct, would be so very appreciated.

Your question is perhaps best asked on the rails list. There are a
couple of different things you could do to make your ActiveRecord usage
more efficient, but this isn’t the forum for that.

http://lists.rubyonrails.org/mailman/listinfo/rails

As far as making this code more rubyish, most rubyists seem to prefer
iterators with blocks, e.g.:

user.roles.each do |role|
role.rights.each do |right|

end
end

to for loops.

  • donald