ruby-on-rails - 验证错误消息未显示在表单视图中
问题描述
我有一个简单的模型:
class Property < ApplicationRecord
belongs_to :user
has_many :invoices, dependent: :destroy
has_many :tenants, dependent: :destroy
validates :street, presence: true, length: { maximum: 50}
validates :city, presence: true, length: { maximum: 50}
validates :zip, presence: true, length: { maximum: 10}
validates :rent, presence: true, length: { maximum: 50}
def receivable
(self.rent.to_i + self.charges.to_i)
end
end
在控制台中尝试时,验证错误按预期出现:
[2] pry(main)> prop = Property.new(street:"zzz")
=> #<Property:0x007fb99cde1cc0 id: nil, number: nil, streetype: nil, street:
"zzz", city: nil, zip: nil, rent: nil, charges: nil, user_id: nil, created_at:
nil, updated_at: nil>
[3] pry(main)> prop.save
(0.3ms) BEGIN
(0.8ms) ROLLBACK
=> false
[4] pry(main)> prop.errors.full_messages
=> ["User must exist", "City can't be blank", "Zip can't be blank", "Rent can't
be blank"]
这是控制器:
def new
@user = current_user
@property = @user.properties.build
end
def create
@user = current_user
@property = @user.properties.create(property_params)
@property.user_id = current_user.id
if @property.save
flash[:notice] = "Nouveau Bien créé !"
redirect_to user_properties_path
else
redirect_to new_user_property_path
end
end
这是表单视图:
<div class="container center">
<div class="row white">
<div">
<h2>Nouveau bien</h2>
<%= simple_form_for([@user, @property]) do |j| %>
<%= j.input :number, label:"Numéro" %>
<%= j.input :streetype, label: "Laisser vide si nécessaire", collection: ["
","rue","boulevard","allée"] , prompt: "Choisir" %>
<%= j.input :street, label:"Nom" %>
<%= j.input :city, label:"Commune / Ville" %>
<%= j.input :zip, label:"Code Postal" %>
<%= j.input :rent, label:"Montant du Loyer" %>
<%= j.input :charges, label:"Montant des charges" %>
<br>
<%= j.submit 'Créer', class: "form-control btn btn-info" %>
<% end %>
</div>
</div>
</div>
当故意省略其中一个字段时,控制器将重定向到正确的表单视图,但不存在验证错误消息。他们曾经出现,但由于某种原因消失了。
知道为什么吗?
谢谢!
解决方案
redirect_to new_user_property_path
而不是else
块,你应该
render 'new'
原因:redirect
指示浏览器发出新请求,因此您最终会丢失@property
对象的上下文及其错误。它实际上提出了新的new
行动要求。render
将继续当前操作(在这种情况下)并在视图中create
呈现响应,错误和以前的表单正文。new
@property
推荐阅读
- binary - GAMS 二元变量逻辑决策
- hibernate - 使用spring data jpa保存或更新或删除实体集合的最佳方法是什么?
- django - 有没有办法在 1 个查询中通过 id/pk/some 查找进行查询,而不是过滤所有节点并使用 id?
- c# - Selenium-元素在点 (403, 697) 处不可点击。其他元素会收到点击
- mysql - 如何在mysql中获取最后一个子关系
- objective-c - 检查空值内的嵌套字典
- dart - 在 Flutter 中调用 showTimePicker() 时如何使用 24 小时制?
- html - 在图像旁边强制文本块
- javascript - 如何组合正则表达式 /^1+/ 和 /-/g?
- php - 未选中时设置 cookie