【问题标题】:Validation error messages not showing in form view验证错误消息未显示在表单视图中
【发布时间】:2018-07-17 05:52:18
【问题描述】:

我有一个简单的模型:

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'
  • 你好kiddorails!是的,它有效。你知道为什么吗?谢谢
  • 请回答这个问题,这样我就可以相信你了!

标签: ruby-on-rails ruby ruby-on-rails-5 simple-form


【解决方案1】:

你应该在 else 块中代替 redirect_to new_user_property_path

render 'new'

原因:redirect 指示浏览器发出新请求,因此您最终会丢失 @property 对象的上下文并出现错误。它实际上对new 操作提出了新的请求。 render 将继续当前操作(在本例中为 create)并在 new 视图中呈现响应,并带有 @property、错误和以前的表单正文。

【讨论】:

    猜你喜欢
    • 2022-11-09
    • 2017-10-19
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多