我是网络开发的新手。我刚刚开始几周前开始阅读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一切正常(显然隐藏/显示选项) 我希望问题很清楚:) 干杯
答案 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 %>";