Вызывая метод в Controller из Model, я знаю, что это неправильно ... - PullRequest
2 голосов
/ 28 июля 2011

а как иначе ???

Моя модель обрабатывает логику и данные для системы бронирования, которую я пишу, которая позволяет пользователям делать регулярные бронирования ресурсов. Я хочу показать всплывающее окно, информирующее пользователя о том, что возникла проблема с повторяющимся бронированием (например, конфликт для одного из ресурсов в один из дней), но в любом случае также разрешить ему продолжить бронирование, т.е. просто не прошли проверку и откат.

Логика хороша для этого, но как лучше вызвать всплывающее окно с отображением конфликтов, если я не могу / не должен вызывать метод контроллера из модели, которая запускает AJAX?

Использование Rails 3

Спасибо за помощь

1 Ответ

0 голосов
/ 28 июля 2011

Я бы начал с определения метода в модели, который возвращает любые конфликтующие события, например:

class Event

   def conflicts
      Event.where(...)
   end

end

Затем, по вашему мнению, вы можете перебирать любые конфликты, если они есть, и отображать их настраницы.

Если вы хотите сделать это перед сохранением события в базе данных, то вы можете добавить некоторый javascript на страницу для POST данных события через AJAX вместе с параметром 'preview' и иметьконтроллер возвращает JSON-представление события, не сохраняя его.Ваш javascript будет отображать любые конфликты, если они есть.

Контроллер может выглядеть примерно так:

class EventsController

   def create
      @event = Event.new(params[:event])

      unless params[:preview]
         @event.save
      end

      respond_with @event, :include => :conflicts            
   end  
end

Я оставлю вам javascript!:)

...