我希望我的应用程序在更新一个对象时显示所有关联对象的列表,因此我想在更新完成后加载index操作。
我尝试格式化块,删除格式,渲染和redirect_to。它们全部都保留在编辑页面上
更新操作:
def update
respond_to do |format|
if @business_category.update_attributes(business_category_params)
format.html {redirect_to admin_business_categories_path}
return
end
end
end
修改视图:
<div class="container">
<div class="row">
<div class="col-xs-12">
<%= link_to 'Back to categories', admin_business_categories_path %>
</div><!-- .col -->
<%= simple_form_for(@business_category, url: admin_business_category_path(@business_category), remote: true, html: { class: '' }) do |f| %>
<%= render 'form', f: f %>
<% end %>
</div><!-- .row -->
</div><!-- .container -->
_form部分:
<div class="col-xs-12 col-sm-10 col-md-10">
<%= f.input :name, label: 'Category Name' %>
</div>
<div class="col-xs-12 col-sm-2 col-md-2">
<div class="btn-group-vertical" role="group" aria-label="...">
<button id="businessCategoryCancelButton" class="btn btn-warning">CANCEL</button>
<%= f.submit 'SAVE', class: 'btn btn-success' %>
<br>
</div>
</div>
redirect_to处,控制台中将显示一条消息:
No template found for Admin::BusinessCategoriesController#update, rendering head :no_content
Completed 204 No Content in 1505ms (ActiveRecord: 1.0ms)
我不知道为什么它要寻找更新模板或为什么不将其重定向到索引操作
我试图了解格式的工作方式以及它是否/为什么与重定向冲突。任何建议都会有所帮助
答案 0 :(得分:1)
因为您正在发出AJAX调用(表单上的remote: true
)。
您有以下选择:
format.js
添加到控制器remote: true
,从控制器中删除respond_to
:def update
if @business_category.update_attributes(business_category_params)
redirect_to admin_business_categories_path
else
render :edit
end
end
答案 1 :(得分:0)
simple_form_for(@business_category, url: admin_business_category_path(@business_category), remote: true, html: { class: '' })
在您的表格中,您提到了remote: true
。它将您的请求作为JS
请求处理。在您的控制器中,您提到了format.html {redirect_to admin_business_categories_path}
,但是它将以format.js
的形式处理,并寻找update.js.erb
文件来处理响应,因为您的请求格式是“ JS”而不是“ HTML” ,因此显示错误。
您必须将请求作为HTML请求发送。
根据您的实现。我认为您只是想在成功的情况下进行重定向,并在出现错误的情况下再次呈现编辑页面。
您必须进行2次更改。
format.html { render :edit }
添加行update_attributes()