2011-11-20 53 views
5

当您点击“创建语言”时,我试图将一个部分纳入类似于这个模式的东西Rails Admin部分模态的轨迹(渲染部分来自不同的模型)

现在,我还没有真正发现代码是如何工作的,我试图在这个Rails - AJAX a Modal Dialog?和自己的东西之间进行混合。

事情是,局部现在被渲染成模态。但是,当我点击“保存”时,验证将返回到“正常”创建新视图,而不是直接在模态内显示验证错误。

  1. 如何直接在弹出的模态中显示验证错误?

  2. 当我保存时,我应该在某种程度上区分保存模式与正常保存,因为此部分将从别处调用,并且需要将新创建的对象直接设置为一个新的对象下。我想我需要与响应格式区分开来,然后使用JS将新ID设置为DropDown ID?

这里写一些代码到目前为止。在包含部分的视图中,它看起来像我在其他控制器上调用另一个控制器(因为我在不同的控制器上 - 新视图)。

$.get('<%= url_for :controller => 'customers', :action => 'new' %>', 
      function(data) { 
       $('#customer-modal').html(data); 
      } 
    ); 

然后将新的不同的请求格式之间的“customres”控制器distinguishs并呈现不同的部分(在这种情况下“_ajax_form.html.erb”):

if request.xhr? 
    render "_ajax_form", :layout => false 

在该局部,我使用“simple_form_for @customer,:remote => true do | f] ....”,所以我想在最后提交应该看起来不同于标准,因为这调用控制器上的正常“创建”?

<div class="modal-footer"> 
    <%= f.button :submit, :class => 'btn primary' %> 
    <a id='cancel-form' class= "btn small info">cancel</a> 
    </div> 

感谢所有帮助其澄清什么,我做错了,或者应该怎么做我的Rails中的经验和JS/AXAX还没有经历过..;)

  • 编辑:我现在有这是模态中加载在我的特殊部分的一个版本,其中,将调用simple_form_for内称为“new_from_sale”一个单独的行动:

simple_form_for @customer, :url => url_for(:action => 'new_from_sale', :controller => 'customers') do |f|

然后在控制器中,当这个新对象保存好的时候,我重定向到第一个被调用的视图,新的id作为参数,然后填充下拉菜单。在其他情况下,当新对象无法保存时,我需要以某种方式显示仍以该模式显示的错误。 到目前为止都试图直接使部分render :partial => "customers/ajax_form"或归还JS代码render :js => "$('#sale_customer_id').val(#{@customer.id});"就没有工作..但我会继续努力我的运气..

回答

2

下面是如何我做了一个基本的例子模式窗体我在响应写信给一个类似的问题(Rails and modal jquery dialog form):

https://github.com/ramblex/modal-form

您需要添加:remote => true到被加载到对话框的形式。这将导致JS格式从创建操作中呈现。然后您可以在create.js.erb中处理响应。

+0

感谢,并非所有事情都适用于我们的事业,但它提供了一些很好的提示。 即,我们使用模态内的部分,并单独创建新的/编辑对象。在那里,我们需要分开,我猜不要使用:remote => true,否则渲染不起作用。 – fisco