ruby-on-rails - 如何在视图中显示模型错误?
问题描述
预期结果:我在屏幕顶部看到错误,例如存在和长度验证错误
实际结果:屏幕顶部没有错误,而我在日志中看到回滚。当我更改时:redirect_to :back, alert: @reason.errors.full_messages
在创建操作中,我确实看到顶部显示错误。
情况:
items_controller
def show
@item = Item.find(params[:id])
@reason = Reason.new
@reasons = reasons_for_item(@item)
end
show.html.erb
<%= form_for(@reason, url: item_reasons_path(@item), html: { class: 'form-inline' }, remote: true) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label "Reason to use" %>
<%= f.text_field :body, class: 'form-control' %>
<%= f.button 'Submit', class: "btn", id: 'reason-submit-btn' %>
<% end %>
shared/_error_messages.html.erb
<% if object.errors.any? %>
<div id="error_explanation">
<div class="alert alert-danger">
The form contains <%= pluralize(object.errors.count, "error") %>.
</div>
<ul>
<% object.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
reasons_controller
def create
@reason = Reason.new(reason_params)
@reason.user = current_user
@item = Item.find_by_id(params[:item_id])
@reason.item_id = @item.id
@reasons = reasons_for_item(@item)
if @reason.save
respond_to do |format|
format.html { redirect_to request.referer }
format.js
end
else
redirect_to :back
end
end
请指教
更新 1:redirect_to
我不打算实现渲染,因为它保留了模型信息。仍然没有显示错误。
更新 2: 通过将带有 error_messages 的表单添加到部分来修复它。现在,在保存失败后呈现部分内容。
解决方案
当您这样做时redirect_to
,它会发送单独的请求并且不存储当前状态,因此它@reason
是一个没有错误的新实体。你需要做render
,而不是redirect_to
def create
@item = Item.find(params[:item_id])
@reason = @item.reasons.build(reason_params.merge(user: current_user))
@reasons = reasons_for_item(@item)
if @reason.save
respond_to do |format|
format.html { redirect_to request.referer }
format.js
end
else
render 'items/show'
end
end
推荐阅读
- java - 如何在会话中设置 B2B 单元(Hybris)?
- c# - WPF DataGridHyperlinkColumn 未触发 Click 事件
- javascript - 对象键的数字顺序从 0 javascript 重新排列
- c - 当它是 sizeof() 函数的参数时,为什么 n++ 不起作用?
- celery - 我可以对 celery 任务对象进行本地回调吗?
- ios - 使用 iOS 将 Intel Realsense D435 连接到 iPhone
- c++ - 使用 std::thread 在 C++ 中的单独线程中执行每个对象
- tabs - Flutter - 如何正确删除 TabBarView 中的选项卡
- javascript - 需要一个 json 文件导致错误:找不到模块
- php - 如何在 http 标头上修改 joomla 网站中的 CSP