行。我在过去几周一直在学习Rails,我真的是个菜鸟。
我正在办理酒店预订系统。我们的想法是加载表单,验证字段并保存数据。如果没有任何验证错误,则会正确保存预订。但是如果表单显示一些验证错误,则提交按钮停止工作(我的意思是,我可以修复文本以便不会弹出验证错误,但一旦修复,我就无法提交新数据)。
这是模特:
class Reserva < ActiveRecord::Base
validates :fecha_ingreso, :fecha_salida, presence: { message: " es un campo obligatorio" },
format: { with: /\d{2}\/\d{2}\/\d{4}/ , message: "Debe utilizar formato dd/mm/aaaa" }
validates :canti_hues, :tipo_hab, :email, :peticion, presence: { message: " es un campo obligatorio" }
validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i }
end
这是控制器:
before_action :set_reserva, only: [:show, :edit, :update, :destroy]
# GET /reservas
# GET /reservas.json
def index
if user_signed_in?
@reservas = Reserva.all
else
redirect_to :controller => 'home', :action => 'ingresar'
end
end
# GET /reservas/1
# GET /reservas/1.json
def show
end
# GET /reservas/new
def new
@reserva = Reserva.new
end
# GET /reservas/1/edit
def edit
end
# POST /reservas
# POST /reservas.json
def create
@reserva = Reserva.new(reserva_params)
respond_to do |format|
if @reserva.save
format.html { redirect_to @reserva, notice: 'La reserva fue creada exitosamente.' }
format.json { render :show, status: :created, location: @reserva }
else
format.html { render :new }
format.json { render json: @reserva.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /reservas/1
# PATCH/PUT /reservas/1.json
def update
respond_to do |format|
if @reserva.update(reserva_params)
format.html { redirect_to @reserva, notice: 'Reserva was successfully updated.' }
format.json { render :show, status: :ok, location: @reserva }
else
format.html { render :edit }
format.json { render json: @reserva.errors, status: :unprocessable_entity }
end
end
end
# DELETE /reservas/1
# DELETE /reservas/1.json
def destroy
@reserva.destroy
respond_to do |format|
format.html { redirect_to reservas_url, notice: 'Reserva was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_reserva
@reserva = Reserva.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def reserva_params
params.require(:reserva).permit(:fecha_ingreso, :fecha_salida, :canti_hues, :tipo_hab, :email, :peticion)
end
end
这是在视图中呈现的_form:
<%= form_for(@reserva) do |f| %>
<% if @reserva.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@reserva.errors.count, "error") %> encontrado:</h2>
<ul>
<% @reserva.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div align='center'>
<table border='1'>
<td width=300 align='center'>
<div class="field">
<%= f.label :fecha_ingreso %><br>
<%= f.text_field :fecha_ingreso %>
</div>
<div class="field">
<%= f.label :fecha_salida %><br>
<%= f.text_field :fecha_salida %>
</div>
<div class="field">
<%= f.label :cantidad_de_huespedes %><br>
<%= f.number_field :canti_hues %>
</div>
<div class="field">
<%= f.label :tipo_de_habitación %><br>
<%= f.text_field :tipo_hab %>
</div>
<div class="field">
<%= f.label :email %><br>
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :peticiones_especiales %><br>
<%= f.text_area :peticion %>
</div>
<div class="actions">
<%= f.submit %>
</div>
</div>
</td>
</table>
<% end %>
如果验证错误已修复,为什么我不能提交? 谢谢你的回答!
答案 0 :(得分:0)
我在项目中输入了代码 - 当我传入表单时:
fecha_ingreso: 22/22/1991
fecha_salida: 23/02/2222
canti_hues: 1
tipo_hab: abc
email: sample@example.com
peticion: abc
一切都过去了。记录保存得当。
当您尝试键入除数字以外的其他值字段时,can't be blank
属性下会显示验证错误canti_hues
。发生这种情况,因为来自number_field
的非数字值根本不会发送到控制器。
另外,您需要做的是确保以正确的格式键入值到其他字段。
但是,在上面的代码中,没有什么可以引起任何意外问题。如果您没有与此表单对应的JavaScript,则唯一的解决方案是错误数据。
PS:快速建议 - 在rails应用程序中,始终用英语命名资源和属性。 Rails已经将机制安装到多元化和单一化,如果你将来想要使用它,你将不得不重构你的大部分代码。