我开始学习RoR,我对变量几乎没有问题,这是我的问题:
我有这个部分:
<% if @user.errors.any? %>
The form contains <%= pluralize($items, "error")%>
<ul>
<% messages = @user.errors.full_messages %>
<% messages.delete "Password digest can't be blank" %>
<% if messages.include? "Password can't be blank" %>
<% messages.delete "Password confirmation can't be blank" %>
<% messages.delete "Password is too short (minimum is 6 characters)"%>
<% end %>
<% messages.each do |msg|%>
<li>* <%= msg %></li>
<% end %>
</ul>
<% $items = messages.count %>
<% end %>
我使用全局变量$items
来访问messages
变量的新值。
问题是,当我刷新页面时,我得到旧值而不是新值。
我想要的是能够在方法messages
中使用变量pluralize
的值。
PS:我无法更改html
答案 0 :(得分:1)
你想这样做:
<%= pluralize(@user.errors.full_messages.size, "error") %>
全局变量将在请求之间保持不变,这就是您看到旧值的原因,因为您将其设置在视图的底部。您不需要使用它们。使用上面的代码,您可以有效地完成您看似想要的内容。
答案 1 :(得分:0)
我不确定你为什么要那样做,但这应该可以解决你的问题:
<% if @user.errors.any? %>
<% messages = @user.errors.full_messages %>
<% messages.delete "Password digest can't be blank" %>
<% if messages.include? "Password can't be blank" %>
<% messages.delete "Password confirmation can't be blank" %>
<% messages.delete "Password is too short (minimum is 6 characters)"%>
<% end %>
<% items = messages.count %>
The form contains <%= pluralize(items, "error")%>
<ul>
<% messages.each do |msg|%>
<li>* <%= msg %></li>
<% end %>
</ul>
<% end %>