Ruby on rails RubyonRails中的变量

Ruby on rails RubyonRails中的变量,ruby-on-rails,ruby,variables,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

我已经开始学习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
变量的新值。 问题是,当我刷新页面时,我得到的是旧值,而不是新值

我想要的是能够在方法
pluralize
中使用变量
messages
的值

PS:我无法更改您要执行的html

<%= pluralize(@user.errors.full_messages.size, "error") %>


全局变量将停留在请求之间,这就是为什么您会看到旧值,因为您将其设置在视图的底部。你不需要使用它们。使用上述代码,您可以有效地完成看似想要的任务。

我不确定您为什么要这样做,但这应该可以解决您的问题:

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

表格包含
  • *

作为一个有用的提示,在模板中摆弄这样的变量通常不是您想要做的事情。通常你会在控制器中进行这种预处理。是的,我想我应该这样做。你说的“它不工作”是什么意思。错误?非复数词?请提供更多细节,我们只是想帮忙!在if语句之后,它给了我旧的值,而不是新的值。好的,试试AbM的答案。这是因为在用复数方法调用$items之后,您正在计算$items。谢谢。我从ruby开始,实际上我想知道在声明变量之前如何使用它。