Rails:逐步验证表单字段

时间:2012-10-23 14:21:55

标签: ruby-on-rails

我正在尝试验证不同的输入值。 例如“域名”和“电子邮件”。两者都必须具有价值并且必须是唯一的。所以我尝试用

来验证它们
validates :domain,
          :presence => true,
          :uniqueness => { :case_sensitive => true }
validates :email,
          :presence => true,
          :uniqueness => { :case_sensitive => true }

但是当我显示flash消息时,我得到四个错误:

["Domain can't be blank", "Domain has already been taken", "Email can't be blank", "Email has already been taken"]

有可能逐渐检查它们吗?如果输入字段没有值,则用户获取

["Domain can't be blank"]

但如果输入字段具有值且不唯一,则用户获取

["Domain has already been taken"]

我该如何实施呢?

修改

下面是打印错误消息的代码:

<% [:error].each do |key| %>
  <% if flash[key] %>
    <div class="<%= key %>" id="flash">
      <%= flash[key] %>
    </div>
  <% end %>
<% end %>

这里是创建错误的控制器:

def create

  respond_to do |format|
    # save form data
    @login = Login.new(params[:login])

    # if validation fails, throw error messages
    if !@login.save
      flash[:error] = @login.errors.to_a
    end

    # redirect to landingpage
   format.html { redirect_to :root }

  end

end

1 个答案:

答案 0 :(得分:2)

如果您没有先调用flash[:error]@user.valid?

@user.invalid?将显示所有错误,然后会返回与该@person对象相关的错误。

请参阅Rails指南,了解如何使用Flash。 还有validation errors部分。

尝试一下:

if !@login.save       
  flash[:error] = @login.errors.to_a if @login.invalid?
end