views:

389

answers:

2

Hi all,

I'm trying to send a variable through a link_to, without using url query in Ruby on Rails, from one controller's index view to be used on another controller's index.

Basically, I need to pass the Turma.id (school class id), to the Elementos_turma(peoples in the class) controller, so I can use it and filter the index: ElementosTurma.find(:all, :conditions => { :turma_id => xxxxx } ), to show the peoples of the selected class.

It it possible? Maybe without using a session variable? Maybe sending the variable to a method on the 1st controller, to send it the other controller? (if so how? not very RoR wise... :) )

A: 

No need for a special method to get the info you need, the magic of routes will do.

In your routes.db file, you should be able to define something like this,

map.resources :class, :has_many => :students

Then if you run 'rake routes' you should see a routes similar to this

class_students GET /classes/:class_id/students(.:format)  {:controller=>"students", :action=>"index"}

You can call that path in your view like so

class_students_path(class_id)

Then in your controller you will have access to params[:class_id]

The name of the route isn't very pretty, but this should work.

EDIT--------------------------------------

According to your comment, you can't use map.resources for some reason or another...

 map.class_students '/:class_id/students', :controller => 'students', :action => 'index'

That will produce the same route available in your view, same param in your controller.

That being said, I don't know how a server bug could prohibit you from using map.resources

Ethan Gunderson
But can I use it without resources?Due to a server bug that we still can't fix and due to the other developer wanting to go old school (no resources...).
Muralha
You don't have resources?? Are you running an ancient version of Rails or something? What kind of a server bug would affect that?
Ethan Gunderson
To fix the bug, the admin has to fix it manually (ruby 1.9/rails 2.3.4 bug... http://stackoverflow.com/questions/1681685/cant-work-with-more-recent-gems) and it's kinda of a sensitive server, so not luck until we finish the job and move it to another server. The other developer wants everything like rails 1.8.X... (old school... no luck too)Can I still use the resources without messing the rest?And by the way, thanks for the help Ethan.
Muralha
Just to help_DB_*Users*id, ..., schoold_id*Class_elements*id, user_id, class_id (users can belong to 1 or more classes... teachers)*Classes*id, ..., school_id_*Models*_*Users*belongs_to :class_elements ? or has_many :class_elements ?*Class_elements*belongs_to :classbelongs_to :users ? or has_many :users ?*Classes*belongs_to :schoolhas_many :class_elements
Muralha
Even on Rails 1.8.x you should be able to do Map.resources, according to apidock.com it was introduced in 1.2 http://apidock.com/rails/ActionController/Resources/resources.I guess what I'm trying to say, if you have a Rails application up and running, using either one of those routing options shouldn't break anything on the server.
Ethan Gunderson
A: 

You can not transfer data through a link without including that data in the link.

However, it sounds like you just need to be using nested resources. (Since I speak English, I'm going to not tackle another language and do what comes to me.) The URLs you want to be sending people to probably should look more like this if you want to be RESTful:

/classes/1/people/

That is the "Rails way" of indicating that you want to get people in class #1, and Rails offers built-in routing methods to make this easy. See the Rails Routing from the Outside In article in the Rails Guide.

Matchu
I think one problem we got with nested resources, was that one of our method was not working for not being a standard name method (editar == edit , or show == ver) and all the others were working...
Muralha