渲染/重定向到现有的JQuery对话框窗口

时间:2015-07-05 04:36:36

标签: javascript jquery ruby-on-rails

某些情况:我试图通过提出一种模式来避免基于电子邮件的确认,要求用户在第一次尝试在我的网站上执行实质性操作时确认其电子邮件地址和电话号码Rails 4应用程序。

此模式是一个JQuery Dialog,它加载一个缩写的用户表单,仅包含用户的联系信息。用户可以更新他的信息并单击“提交”,或者只需单击“提交”以确认信息是否正确。

我的用户控制器中有一些代码处理表单提交并以标准方式重定向到不同的视图:

    if update_required
      respond_to do |format|
        if @user.update(attribs)
          puts "update succeeded"
          format.html { render :confirmation_update, :layout => false }
          format.json { render :show, status: :ok, location: @user }
        else
          puts "update failed dismally"
          format.html { render :confirmation, :layout => false, alert: 'there were errors'}
          format.json { render json: @user.errors, status: :unprocessable_entity }
        end
      end
    end

我的问题是在成功/失败时呈现的表单会在主窗口中呈现,我希望它们在现有的JQuery对话框窗口中呈现。有没有办法可以指定渲染这些视图的目标?

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是,您必须像ajax调用一样发送此请求。 首先,您之前的表单必须具有remote:在他的选项中为true,并且您的操作必须使用js:

进行响应
if update_required
  respond_to do |format|
    if @user.update(attribs)
      puts "update succeeded"
      format.js { render :confirmation_update }
    else
      puts "update failed dismally"
      format.js { render :confirmation }
    end
  end
end

这个文件的confirm_update和确认必须是js.erb,下一个内容就像Jquery对话框的例子一样:

$('#myModal').html("<%= j render('confirmation_content')%>");
$('#myModal').dialog('open');

confirmation.js.erb中的错误消息:

$('#flash').html("there were errors"); 

使用此示例,应创建文件_confirmation_content.html.erb,并且必须是具有模态内容的rails部分。