Доброго времени суток, уважаемые форумчане! В рельсах и в вебе вообще я новичек, изучаю, можно сказать. Надо сделать выбор страны\города, соответствено, в дропдауне выбираю страну - в другом дропдауне - город. Город belongs_to страна.
Нашел пример: http://pullmonkey.com/2008/3/30/dynamic-select-boxes-ruby-on-rails
Сделал по аналогии. (Для формирования формы я использую form_for, в примере этого нет, но collection_select этого объекта мне не покорился, использую простой.)
Проблема такая: в функции контроллера update - не могу получить параметр выбранного города. Да и страны тоже, хотя - странно, но в update_cities (запускатся по событию onselect дропдауна страна) country_id отлично получается. Вопрос: как таки получить ?
Вопрос второй: как бы сделать так, чтоб этот city_id был параметром account, если это возможно? Ну и вообще, как грамотно сделать?..
Заранее спасибо!
Вот код:
| Код |
1. class AccountsController < ApplicationController 2. ... 3. # GET /accounts/1/edit 4. def edit 5. @account = Account.find(params[:id]) 6. @countries = Country.find(:all) 7. @cities = City.find(:all) 8. end 9. def update 10. @account = Account.find(params[:id]) 11. mama = params[:city_id] # тут пытаюсь получить параметр, не получается 12. respond_to do |format| 13. if @account.update_attributes(params[:account]) 14. flash[:notice] = 'Account was successfully updated.' 15. format.html { redirect_to(@account) } 16. format.xml { head :ok } 17. else 18. format.html { render :action => "edit" } 19. format.xml { render :xml => @account.errors, :status => :unprocessable_entity } 20. end 21. end 22. end 23. def update_cities 24. puts "mama papa " + params[:country_id].to_s 25. country = Country.find(params[:country_id]) 26. cities = country.cities 27. 28. render :update do |page| 29. page.replace_html 'cities', :partial => 'cities', :object => cities 30. end 31. 32. end 33. end
|
представление:
| Код | 1. <h1>Editing account</h1> 2. 3. <%= error_messages_for :account %> 4. 5. <% form_for(@account) do |f| %> 6. <p> 7. <b>Name1</b><br /> 8. <%= f.text_field :name1 %> 9. </p> 10. 11. <p> 12. <b>Country</b><br /> 13. <%= collection_select(nil, :country_id, @countries, :id, :name,{}, 14. {:onchange => "#{remote_function(:url => {:action => "update_cities"}, 15. :with => "'country_id='+value")}"}) %> 16. </p> 17. 18. <div id = "cities"><%= render :partial => "cities", :object => @cities %> </div> 19. 20. <p> 21. <b>Avatar</b><br /> 22. <%= f.text_field :avatar %> 23. </p> 24. 25. <p> 26. <%= f.submit "Update" %> 27. </p> 28. <% end %>
|
partial:
| Код | 1. <p> 2. <b>City</b><br /> 3. <%= collection_select(nil, :city_id, cities, :id, :name) %> 4. </p>
|
|