#jquery #ruby-on-rails #ajax #ruby-on-rails-3
#jquery #ruby-on-rails #ajax #ruby-on-rails-3
Вопрос:
В принципе, у меня есть модель Events и модель EventSets. События имеют наборы событий (где применимо), поэтому я могу соответствующим образом перечислить и сгруппировать их в приложении (скажем, набор событий Concerts in the Park, где каждое отдельное концертное событие имеет немного отличающиеся атрибуты, но большая часть данных являются общими для всех событий в этом наборе).
У меня есть необходимые ассоциации, чтобы я мог назначить набор событий в Events#new.
В моей модели EventSet у меня есть несколько столбцов информации по умолчанию (общее местоположение, общее имя и т.д.), Которые я хотел бы использовать для предварительного заполнения полей в Events#new.
Набор событий для нового события обозначается полем выбора (в котором перечислены все наборы событий, извлеченные из таблицы EventSets).
Существует ли стандартный способ обработки этого в Rails 3 (с jQuery)? Или я должен использовать свое собственное исправление jQuery / AJAX для обработки этого? (Мне нравится придерживаться разумных значений по умолчанию, где это уместно.)
Редактировать для пояснения: я пытаюсь предварительно заполнить поля формы, все еще находясь в / events / new view, до отправки формы (как только выбран набор событий). Это необходимо, потому что «значения по умолчанию», обозначенные в наборе событий, часто будут переопределены для данного события… они являются лишь отправной точкой для экономии повторения ввода для пользователя.
Ответ №1:
Используйте обратный вызов 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
Редактировать
Вам нужно будет захватить эти поля с помощью 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");
});
Комментарии:
1. Спасибо за ответ, но мне следовало более четко указать в моем вопросе: я пытаюсь предварительно заполнить поля формы, все еще находясь в / event / new view, до отправки формы (как только выбран набор событий). Отредактирует вопрос соответствующим образом.