错误在rails中显示两次

时间:2015-03-13 17:15:13

标签: ruby-on-rails ruby-on-rails-4 carrierwave minimagick

我正在使用carrierwave上传用户模型中的个人资料图片。 如果用户尝试上载任何非图像的文件,则必须引发错误。但是,错误会在屏幕上显示两次。 请帮忙

用户模型代码     class User<的ActiveRecord ::基

include CarrierWave::MiniMagick

validates :email, :presence =>true,  :uniqueness => {case_sensitive: false}, :format => { :with=> /([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/, :message => "please enter a valid e-mail" }
validates :name, :presence=>true
validates :password ,:presence =>true, :confirmation=> true #, :length =>{ :minimum=>6, :maximum=>30}, :format=>{:with=>/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,30}/}

#for the image
mount_uploader :image, ImageUploader

#for the password
has_secure_password

**代码ImageUploader **

def scale(width, height)
 image.resize widthxheight
   end

   #Create different versions of your uploaded files:
   version :thumb do
     process :resize_to_fit => [50, 50]
   end

  # Add a white list of extensions which are allowed to be uploaded.

   def extension_white_list
     %w(jpg jpeg gif png)
   end

错误部分代码

<% if object.errors.any?%>
<ul>
<%= object.errors.full_messages.each do |message|%>
    <li><%= message%></li>
    <%end%>
</ul>

<%end%>

2 个答案:

答案 0 :(得分:2)

erb中,<% .. %>用于评估其中的Ruby代码,<%= .. %>用于评估以及在erb中打印输出。

在下面的代码中,您使用了<%= ... %>两次,一次使用<%= message%>显示错误消息,另一次使用<%= object.errors.full_messages.each do |message|%>显示相同的错误消息。 这导致错误消息显示两次。修改您的代码如下所示,您只需要<%= ... %>,而不是在迭代错误消息集合时显示错误消息。

<% object.errors.full_messages.each do |message|%> <%# Removed "=" %>
  <li><%= message%></li>
<%end%>

答案 1 :(得分:0)

更改

<%= object.errors.full_messages.each do |message|%>

<% object.errors.full_messages.each do |message|%>

注意开头的<%而不是<%=

<%=用于打印出已计算表达式的输出。使用<%用于指示仅应评估表达式并且不打印输出。