【发布时间】:2015-06-28 12:15:40
【问题描述】:
我是 Ruby on Rails 的新手,我遇到了表单上不显示错误消息的问题。我已经坚持了好几天了,我已经尝试了几乎所有我看到的关于这个错误的解决方案/建议,但我无法让它发挥作用。我必须填写表格,一份给用户,一份给果岭。他们都使用相同的共享消息部分,并且用户表单在输入无效时会显示错误消息,但绿色表单不会。
Greens 表格(显示在 greenmetrics 视图中):
<%=form_for(@green) do |f| %>
<%= render partial: 'shared/error_messages', object: f.object %>
<div class="form-group">
<div class="col-xs-2"><legend> Add new metrics:</legend></div>
<div class="col-xs-2 ">
<%= f.number_field :number, class: 'form-control', placeholder: "Green number" %>
</div>
</div>
<div class="form-group">
<div class="col-xs-2 ">
<%= f.number_field :speed, class: 'form-control', placeholder: "Green speed", :step => 'any' %>
</div>
</div>
<div class="form-group">
<div class="col-xs-2 ">
<%= f.number_field :firmness, class: 'form-control', placeholder: "Green firmness", :step => 'any' %>
</div>
</div>
<div class="form-group">
<div class="col-xs-2 ">
<%= f.date_field :measure_date, class: 'form-control', placeholder: "Date of measurement" %>
</div>
</div
<div class="form-group">
<div class="col-xs-1 ">
<%= f.submit "Submit", class: "btn btn-primary" %>
</div>
</div
</div>
<% end %>
用户表单:
<% provide(:title, 'Register') %>
<h1>Sign up</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :first_name %>
<%= f.text_field :firstname, class: 'form-control' %>
<%= f.label :last_name %>
<%= f.text_field :lastname, class: 'form-control' %>
<%= f.label :golf_course %>
<%= f.text_field :golf_course, class: 'form-control' %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :username %>
<%= f.text_field :username, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :password_confirmation, "Password Confirmation" %>
<%= f.password_field :password_confirmation, class: 'form-control' %>
<%= f.submit "Create my account", class: "btn btn-primary" %>
<% end %>
</div>
</div>
共享消息部分
<% 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 %>
格林模型
class Green < ActiveRecord::Base
belongs_to :user
default_scope -> { order(measure_date: :desc, number: :asc) }
validates :user_id, presence: true
validates :number, presence: true
validates :speed, presence: true
validates :firmness, presence: true
validates :measure_date, presence: true
end
用户模型:
class User < ActiveRecord::Base
has_many :greens, dependent: :destroy
before_save { self.username = username.downcase}
before_save { self.email = email.downcase}
validates :firstname, presence: true, length: { maximum: 50 }
validates :lastname, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX }
#,uniqueness: { case_sensitive: false}
validates :golf_course, presence: true, length: { maximum: 50 }
validates :username, presence: true, length: { maximum: 25 },
uniqueness: { case_sensitive: false}
has_secure_password
validates :password, length: {minimum: 6}
# Returns the hash digest of the given string.
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
Controller
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@greens = @user.greens
end
def greenmetrics
@user = current_user
@greens = @user.greens
@green = current_user.greens.build if logged_in?
end
果岭控制器:
def create
@user = current_user
@green = current_user.greens.build(green_params)
if @green.save
flash[:success] = "Green metrics saved!"
@greens = @user.greens
redirect_to (:back)
else
flash[:danger] = "Please verify that all data is valid"
redirect_to (:back)
end
end
我不得不添加闪现危险,因为验证中的错误消息没有显示出来......
提前感谢您的帮助。
安德烈亚
【问题讨论】:
标签: ruby-on-rails