提交rails远程true form_for并且没有重定向

时间:2015-05-20 14:29:34

标签: javascript ruby-on-rails

我是网络开发的新手。我刚刚开始几周前开始阅读ruby on rails教程,在此之前我只知道一点C +。所以问题对你来说可能很容易,但我已经花了2天的时间寻找一个我没找到的答案。 我所拥有的是一个form_for,其数据字段根据单击的单选按钮显示/消失。这工作正常,当我提交表单时,数据正确保存在数据库中!问题是我根本没有被重定向。在shell中写的是

在布局/应用程序中渲染patient / show.html.erb已完成200 ok

但是在浏览器中我仍然看到/ srtinitial_infos / new(即填写表单的页面)。

我的代码是

   #new.html.erb
<%= form_for(:srtinitial_infos, url: {action: "create"},remote: true) do |f|%>
<%= javascript_include_tag "srtinitial_infos_new.js" %>
 <p>
    <strong>Operations  </strong>
<%= f.radio_button :operation, '1', :value=>1%>
<%=label   :operation_yes,'Yes'%>
<%= f.radio_button   :operation, '0', :value=>0%>
<%=label   :operation_no,'No'%>
<%= f.radio_button   :operation, '2', :value=>2%>
<%=label   :operation_ni,'No info'%>
</p>    

<div id="opdate">
<p>
<strong>Date of operation  </strong>
<%=f.date_select :operationdate%><br>
<p>
</div>
<p>
<strong>Date of MRI  </strong>
<%=f.date_select :mridate%><br>
<p>


<%=f.submit "Save" %>

Javascript

 #javascript/srtinitial_infos_new.js.erb
 $(function(){

$("#opdate").hide();

$("input:radio[name='srtinitial_infos[operation]']").change(function(){  

        if(this.value == 1 && this.checked){
          $("#opdate").show();
        }else{
          $("#opdate").hide();
        }

    });

  });

控制器

def create
  @patient=Patient.find(params[:patient_id])
if @patient.srtinitial_info
 render 'show'
else
@srtinitial_info=@patient.create_srtinitial_info(srtinitial_infos_params)
 @srtinitial_info.author=@current_user.email
 @srtinitial_info.save
 redirect_to patient_path(@patient)
 end
end

由于我认为问题存在于控制器中,因为数据保存正确,我也尝试编写像

这样的东西
   def create
@patient=Patient.find(params[:patient_id])
@srtinitial_info=@patient.create_srtinitial_info(srtinitial_infos_params)
@srtinitial_info.author=@current_user.email
respond_to do |format|
    if @patient.srtinitial_info
     format.html { render action: "show"}
    else @srtinitial_info.save
     format.html { redirect_to @patient, notice: 'Correctly initialized.'}
     format.js   {}
    end

我在新控制器中尝试了类似的东西

 def new
  @patient=Patient.find(params[:patient_id])
  respond_to do |format|
    format.html # new.html.erb  
    format.js
  end
 end

如果我不使用遥控器:true一切正常(显然隐藏/显示选项) 我希望问题很清楚:) 干杯

1 个答案:

答案 0 :(得分:0)

您可以使用.js.erb文件来响应AJAX请求。在这种情况下,您需要show.js.erb在与show.html.erb相同的视图文件夹中。该文件使用javascript更新页面而不进行刷新/重定向。

假设您有一个ID为notice的div,您要显示该消息,show.js.erb可能如下所示:

$("#notice").html("<%= flash [:notice] %>"):

如果您想重定向到另一个页面,那么您可以从控制器进行客户端重定向:

window.location = "<%= patient_path @user %>";