红宝石在铁轨上的变量

时间:2013-11-26 21:22:09

标签: ruby-on-rails ruby variables

我开始学习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

2 个答案:

答案 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 %>