Ajax.updater to call app_helper or model method


#1

I am quite newbie to rails and stuck with a problem.

In my application I have a Ajax.updater call to update counties list in
a select drop down whenever a city name is selected. I need to do this
in many place in my application. Currently the Ajax is working fine. But
the get_counties action is in the controller. So I am using this action
in all controllers that I need. However, it would be nice if I could
move this to a County or City model or application_helper.rb . Calling
this method from application_helper is not working as rails/ajax still
looks for this action in the controller. How can I deal with this? And
in general what will be the best place to add this method.

Below is my code:

Controller action:

def get_counties
@county = {}
@counties = {}
@fake_county_name = ‘(city)’
if not params[:id].blank?
index = params[:id]
@counties = County.find(:all, :conditions=> [“city_id = ? AND name
!= ?”, index, @fake_county_name ], :order=>“name”)
end
render :partial => ‘county’, :locals=>{ “counties”=>@counties,
“county”=>@counties }
end




View partial:

<%= options_from_collection_for_select(@counties, "id", "name", @county[:id]) %>
Select city:* <%= options_from_collection_for_select(@cities,"id","name",@city[:id]) %>
Select county:*


_section.rhtml


<%= options_from_collection_for_select(@secs, “id”, “name”,
@sec[:id]) %>

Cheers,
CS.


#2

On Feb 28, 11:03 pm, Carlos S. removed_email_address@domain.invalid
wrote:

in general what will be the best place to add this method.

The more conventional way to do this would to have a single
get_counties action in the Cities controller (or expose counties as a
nested resource of cities, but you might want to leave that for
another day). Your if you change your ajax updater to make a request
to /some_controller/some_action then all of the pages using this
partial will make their ajax requests to the same place

Fred


#3

Thanks Fred…

I don’t have counties or cities controller right now. The
get_counties/sections method is placed in the other controllers (users
and exhibitions).

I wanted to do this application RESTful way, however I haven’t been
successful in doing so. Your suggestion of making counties as a nested
resource of cities was my initial thought. (And also user belongs to a
county. ) However, when I tried to do RESTful the ‘usual CRUD actions’
(list, add, show, update, delete) for the user_controller worked but
get_counties action did not work. The error being in Ajax.updater method
as it uses POST and REST allowed only get, put, and delete.

Can someone help me in understanding this?

  1. Any suggestion for placing get_sections method?
  2. And how to use actions in RESTful way? Many tutorials point to list,
    add, show, update, delete example… But how can we do it for other
    actions. (In my case essentially it will be a list of counties
    pertaining to particular city… But I don’t know how to do this… Any
    help appreciated…

Thanks,
CS.

Frederick C. wrote:

On Feb 28, 11:03�pm, Carlos S. removed_email_address@domain.invalid
wrote:

in general what will be the best place to add this method.

The more conventional way to do this would to have a single
get_counties action in the Cities controller (or expose counties as a
nested resource of cities, but you might want to leave that for
another day). Your if you change your ajax updater to make a request
to /some_controller/some_action then all of the pages using this
partial will make their ajax requests to the same place

Fred


#4

On Mar 1, 12:48 am, Carlos S. removed_email_address@domain.invalid
wrote:

(list, add, show, update, delete) for the user_controller worked but
get_counties action did not work. The error being in Ajax.updater method
as it uses POST and REST allowed only get, put, and delete.

You can use any method with an Ajax.Updater ( check the prototype api
docs).

Can someone help me in understanding this?

  1. Any suggestion for placing get_sections method?
  2. And how to use actions in RESTful way? Many tutorials point to list,
    add, show, update, delete example… But how can we do it for other
    actions. (In my case essentially it will be a list of counties
    pertaining to particular city… But I don’t know how to do this… Any
    help appreciated…

You can have arbitrary actions on both members of a collection or the
collection itself. I don’t think you need this here though. I would
recommend you read through the guide on routing (
http://guides.rubyonrails.org/routing_outside_in.html )

Fred


#5

Frederick C. wrote:

On Mar 1, 12:48�am, Carlos S. removed_email_address@domain.invalid
wrote:

(list, add, show, update, delete) for the user_controller worked but
get_counties action did not work. The error being in Ajax.updater method
as it uses POST and REST allowed only get, put, and delete.

You can use any method with an Ajax.Updater ( check the prototype api
docs).

If I use get method then it does not update the select dropdown (which
is what it is intended to do).

Can someone help me in understanding this?

  1. Any suggestion for placing get_sections method?
  2. And how to use actions in RESTful way? Many tutorials point to list,
    add, show, update, delete example… But how can we do it for other
    actions. (In my case essentially it will be a list of counties
    pertaining to particular city… �But I don’t know how to do this… Any
    help appreciated…

You can have arbitrary actions on both members of a collection or the
collection itself. I don’t think you need this here though. I would
recommend you read through the guide on routing (
http://guides.rubyonrails.org/routing_outside_in.html )

Fred


#6

On Mar 1, 2:40 am, Carlos S. removed_email_address@domain.invalid
wrote:

If I use get method then it does not update the select dropdown (which
is what it is intended to do).

Then you must be doing something funny somewhere as (apart from
routing) whether it’s a get or a post is pretty much irrelevant (and
semantically get is the correct method to be using here).

Fred


#7

It works fine until I start making my application RESTful way…
Any clues? How can I debug this issue?

Frederick C. wrote:

On Mar 1, 2:40�am, Carlos S. removed_email_address@domain.invalid
wrote:

If I use get method then it does not update the select dropdown (which
is what it is intended to do).

Then you must be doing something funny somewhere as (apart from
routing) whether it’s a get or a post is pretty much irrelevant (and
semantically get is the correct method to be using here).

Fred