从Model中调用Controller中的方法,我知道它不对...

时间:2011-07-28 12:36:45

标签: ruby-on-rails-3 model-view-controller

但是怎么回事?

我的模型正在处理我正在编写的预订系统的逻辑和数据,该系统允许用户重复预订资源。我想显示一个弹出窗口,让用户知道定期预订存在问题(例如,其中一天的某个资源发生冲突),但也允许他们继续预订,即不要只是验证和回滚失败。

这样的逻辑很好但是如果我不能/不应该从激活某些AJAX的模型中调用控制器方法,那么调用弹出窗口显示冲突的最佳方法是什么?

使用Rails 3

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我首先在模型上定义一个返回任何冲突事件的方法,例如:

class Event

   def conflicts
      Event.where(...)
   end

end

然后,在您的视图中,您可以迭代任何冲突(如果有),并在页面上显示它们。

如果要在将事件保存到数据库之前执行此操作,则可以向页面添加一些javascript以通过AJAX POST事件数据,以及“预览”参数,并让控制器返回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留给你! :)