Rails 3,远程表单重定向,想留在页面上,缺少模板错误?

时间:2012-04-01 19:55:18

标签: ruby-on-rails ajax forms submit

我想我必须做些蠢事。不幸的是,由于愚蠢的性质,我无法分辨出我愚蠢的是什么。所以,正如你猜测的那样,我觉得非常愚蠢。

请帮助我克服这种愚蠢的砖墙。

我希望能够点击提交按钮,而不是离开页面,而且该页面甚至没有尝试重新加载!这是由ajax完成的,我已经阅读了几个指南,我甚至让它在之前的另一个项目上工作。在这个例子中,我用scriptaculous隐藏了div。在之前版本的ajax表单提交中,我使用了(伪代码)

   render update do |page| 
       page replace html with this div 
   end

但是这次我实际上并不是要替换div或者其他东西,我只是用一个onclick事件将其隐藏起来....

我想要的是表格实际提交并让它消失。

所以我正在处理一个表单,这里是表单标签:

        <%=form_for :call_back_request, :remote => true, :url => {:action => "call_back_request_cbrsent"} do |c| %>

正如您所看到的那样:remote =&gt;真

我有各种表单输入字段,我认为或多或少不相关,这是相关部分:

这是一个属于提交按钮的字段,因此我将其包含在此处:

    <%= hidden_field_tag :instructor_id, "empty", :id=>"instructor_hidden_field" %>

这是提交按钮,因为你可以看到我正在使用scriptaculous来隐藏div,这就是提交按钮所在的div。

它可能会影响这一点,而不是从这个stackoverflow问题中删除它我已经包含它。

    <%=c.submit 
    :value=>"SEND", 
    :style=>"width:90px; height:33px; padding-bottom:0; font-size:1em;", 
    :class=>"lpl-go-button lpl-go-button-submit", 
    :onclick=>"Effect.BlindUp('cbr_row_#{rp[:name]}');  document.getElementById('instructor_id').value = '#{rp[:instructor_id]}';return false;", :remote=>true %>

(我在这里添加了换行符,以防止你们不得不向右滚动)

来自控制器:

      def call_back_request_cbrsent
        @call_back_request = CallBackRequest.new(params[:call_back_request])
        @instructor = Instructor.find_by_id(params[:instructor_id])
        @call_back_request.instructor_id = params[:instructor_id]
        @call_back_request.save
        email = UserMailer.create_send_call_back_request(@call_back_request, @instructor)
        email.set_content_type("text/html")
        UserMailer.deliver(email)
      end

现在,事情是,只要我疲惫的头脑可以看到回报是假的; &安培;遥控器=&gt; true(具体在提交标记中)不做任何事情。我的大脑缓存完全阻塞,我无法思考。感觉我需要退后一步,因为我没有在这里看到问题。

感谢任何人在这里努力通过我的电子邮件给我一个答案,我感谢我在那里有很多华夫饼干。真对不起。精疲力竭。想想Jonestone博士说“对不起,我没有时间写一篇简短的文章” - 其中有一点是在这里发生的。

只是为了澄清,目前我在远程表单上丢失了模板错误... 我尝试添加此

    render :nothing => true

但是,它没有用。

它在渲染空白页面方面做得很好,我不知道这是什么意思,所以我假设它对我来说不正常,或者由于某些原因它在这种情况下不合适。

1 个答案:

答案 0 :(得分:3)

尝试(在您的控制器中)

render :nothing => true

编辑:

啊,如果您有模板错误,您应该这么说。

我刚注意到你也要删除div。

那么你想做什么,它在你的控制器中:

def call_back_request_cbrsent
....
    respond_to do |format|
      format.html
      format.js
    end
end

然后在您的视图中制作一个call_back_request_cbrsent.js.erb文件。这将包含用于删除该表单的JavaScript。它显然包含以下内容:

$("#form").remove()

...这是在jQuery中,但只是使用你一直用来删除表单的任何javascript。