如何从 Rails 5 应用程序中的表中的特定属性列表中获取 nil 值而不是 nil 值的计数?



Rails 5 应用程序,用户模型使用 Devise 设置

的我有一个使用 Devise gem 创建的用户模型。我想获取模型中特定列的计数,这些列为 nil 且也不为 nil。例如,我使用它来获取所有列的计数:

无:<%= user.attributes.values.count { |v| v.nil? } %>

不无:<%= user.attributes.values.count { |v| !v.nil? } %>

但是,我只想找到某些属性的计数。我只想要

  • 名字
  • 赛尔
  • 城市

如果我创建这样的模型方法

def profile_attributes
[:name, :cel, :city, :state]
end 

那么在我看来:= volunteer.profile_attributes.count=> 4

现在,如果citystatenil我会想要=>2

我如何让它工作?

如果我正确理解了这个问题,给定一个volunteer作为具有profile_attributes方法User对象:

# not nil
(volunteer.profile_attributes.select { |attr| !volunteer.send(attr).nil? }).count
# nil
(volunteer.profile_attributes.select { |attr| volunteer.send(attr).nil? }).count

这其实很明显。我可能没有很好地解释这个问题。执行此操作的方法只是添加选择。因此,您将拥有以下内容:

<% User.select(:name, :cel, :city, :state).each do |user| %>
Nil count
<%= user.attributes.values.count { |v| v.nil? } %>
Not nil count
<%= user.attributes.values.count { |v| !v.nil? } %>
<% end %>

最新更新