1

我在我的用户模型中有一个验证,它检查输入文本是否有值:

validate :picture_name
...
...
...

def picture_name
    errors[:picture].push "no_name" if namePicture.blank?
end

html文本字段:

<input type="text" name="namePicture" />

在我看来,我想检查 @user.errors[:picture] 是否仅包含1 个错误并且错误文本是“no_name”(no_name 是图片名称验证添加的错误):

<% if @user.errors.count.eql? 1 && @user.errors['picture'] == "no_name" %>
   <h1> test works </h1>
<% else %>
   <h1> test doesn't works </h1>
<% end %>

但我不知道为什么它总是向我显示“测试不起作用”,即使 errors['picture'] 只包含(一个)“no_name”作为错误!

我的 if 语句有错误吗?要不然是啥 ?

谢谢你

4

2 回答 2

1

如果有人感兴趣,我在上面的声明中找到了解决方案:

if @user.errors.count.eql? 1 && @user.errors['picture'] == "no_name"

我使用高优先级的&&运算符,这意味着我的语句如下所示:

if @user.errors.count.eql? ( 1 && @user.errors['picture'] == "no_name" )

或更明确地

if @user.errors.count.eql? true

这是不正确的

所以,解决方案是:

使用括号:

if (@user.errors.count.eql? 1) && (@user.errors['picture'] == "no_name")

或使用较低优先级的“AND”运算符:

if @user.errors.count.eql? 1 and @user.errors['picture'] == "no_name"
于 2013-10-06T15:32:10.390 回答
0

我猜这与使用符号 (:picture) 设置错误有关,但在字符串 ('picture') + errors[:picture] 上测试包含一个数组,而不是一个字符串

于 2013-10-06T14:31:50.517 回答