Заполнение полей формы для одной модели данными из другой модели (в Rails) - PullRequest
0 голосов
/ 11 июня 2011

В основном у меня есть модель Events и модель EventSets.События имеют наборы событий (где это применимо), поэтому я могу соответствующим образом перечислить и сгруппировать их в приложении (скажем, набор Концертов в событиях парка, где каждое отдельное событие концерта имеет слегка отличающиеся атрибуты, но большинство данных являются общими для всех событийэтот набор).

У меня есть необходимые ассоциации, чтобы я мог назначить EventSet в Events # new.

В моей модели EventSet у меня есть несколько столбцов 'информация по умолчанию (общее местоположение, общее имя и т. д.), которую я хотел бы использовать для предварительного заполнения полей в Events # new.

EventSet для нового события определяется выборомполе (в котором перечислены все EventSets, извлеченные из таблицы EventSets).

Существует ли стандартный способ обработки этого в Rails 3 (w / jQuery)?Или я должен свернуть свое собственное исправление jQuery / AJAX, чтобы справиться с этим?(Мне нравится придерживаться разумных значений по умолчанию.)

Редактировать для уточнения: Я пытаюсь предварительно заполнить поля формы, пока ещев представлении / events / new перед отправкой формы (как только будет выбран EventSet).Это необходимо, потому что назначенные EventSet «значения по умолчанию» часто переопределяются для данного события ... они являются лишь отправной точкой для экономии при повторении ввода для пользователя.

1 Ответ

0 голосов
/ 11 июня 2011

Используйте обратный вызов after_initialize

def after_initialize :copy_stuff

def copy_stuff
  return unless self.new_record?
  @event_set = EventSet.find(...)
  self.field1 = @event_set.field1
  self.field2 = @event_set.field2
end

Вы также можете сделать что-то подобное в контроллере.

def new
   @event_set = EventSet.find(...)
   @event = Event.new(:field1 => @event_set.field1, :field2 => @event_set.field2)
   ...
end

EDIT

Вам нужно будет захватить эти поля с помощью ajax-запроса.

routes.rb

post '/get-eventset-fields' => 'events#event_set_fields', :as => :get_eventset_fields

events_controller.rb

def event_set_fields
  @event_set = EventSet.find_by_id(params[:eventset_id])
  render :json => @event_set.to_json
end

new.html.erb

var mycallback = function(data){
   $('#event_field1').val(data.field1);
   $('#event_field2').val(data.field2);
}

$("#eventset_select").change(function(){
   $.post('<%= get_eventset_fields_path %>', {'eventset_id': $(this).val()}, mycallback, "json"); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...