Частицы Ajax-форм в Rails для нескольких моделей - PullRequest
0 голосов
/ 29 июля 2010

У меня есть этот фрагмент AJAX-кода (взято из: http://badpopcorn.com/blog/2008/09/11/rails-observer-field/), который присутствует во многих представлениях (в основном new.html.erb и edit.html.erb). Дублирование Я притворяюсь, чтобы использовать частичные:

приложение / просмотров / города / _state_city_form.html.erb

<p> State:
  <%= select(:state, :state_name, City.all(:select => 'DISTINCT(state)', :order => :state).collect {|c| [ c.state.titleize, c.state ] }, {:include_blank => true})%>
  <%= observe_field 'state_state_name', :url => { :action => :by_state,
                                                  :controller => :cities },
                                                  :update => 'cities_list',
                                                  :with => "'state='+ $('#state_state_name').val()" %>
</p> City:
  <div id="cities_list">
    <%= select(modelname.to_sym, :city_id, [], {:include_blank => true})%>
  </div>
<p>
</p>

Также у меня есть содержимое обратного вызова Ajax:

приложение / просмотров / города / by_state.html.erb

<%= select(/*PROBLEM_HERE*/, :city_id, @cities.collect {|c| [ c.name, c.id ] }, {:include_blank => true})%>

И контролер моего города:

приложение / контроллеры / cities_controller.rb

class CitiesController < ApplicationController

  def by_state
    @cities = City.find_all_by_state(params[:state])
    render :layout => false
  end

end

Тогда я бы просто назвал частичное в каждом, где это необходимо:

приложение / просмотров / пользователь / new.html.erb

...
<%= render :partial => 'cities/state_city_form', :locals => { :modelname => :user } %>
...

приложение / просмотров / сотрудник / new.html.erb

...
<%= render :partial => 'cities/state_city_form', :locals => { :modelname => :employee } %>
...

Здесь я могу передать: пользователь или : сотрудник частичному, но как я могу передать их обратному вызову Ajax?

1 Ответ

0 голосов
/ 29 июля 2010

Вы можете попытаться передать имя модели в виде строки в парциальное и преобразовать его в символ, используя to_sym.

Надеюсь, это поможет.

...