Ruby on rails RubyonRails中的变量
我已经开始学习RoR,我对变量没有什么问题,以下是我的问题: 我有一个部分: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
<% 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开始,实际上我想知道在声明变量之前如何使用它。