【问题标题】:Rails helper method return NilClassRails 辅助方法返回 NilClass
【发布时间】:2019-07-24 04:41:40
【问题描述】:

我在User#index 视图中有此代码:

<%= User.find_each do |user| %>
  <%= user.name %>
<% end %>

返回用户名:

user1 user2 user3 ...

然后我把这段代码移到UserHelper:

module UserHelper
  def get_users
    User.find_each do |user|
      user.name
    end
  end
end

并从User#index 视图调用它:

<%= get_users %>

问题是这没有返回任何用户。如果我使用&lt;%= get_users.class %&gt;,它会输出NilClass。为什么辅助方法没有返回用户名?

【问题讨论】:

    标签: ruby-on-rails ruby helper


    【解决方案1】:

    您的辅助方法隐式返回调用find_each 的结果,这与返回用户名集合不同。

    把它想象成运行5.times { |n| puts n }:那有什么价值?不是“0 1 2 3 4”,而是“5”,因为times 返回的是它被调用的内容,而不是其块中运行的内容。

    顺便说一句,您的原始代码返回完全相同的内容 - 您依赖于 find_each 块内的副作用,即将 user.name 附加到响应中。

    如果你想返回用户名的集合,你想map/etc。并获取每个用户的姓名。或者,IIRC,您可以进行查找和提取,这样您就只能取回用户的姓名,而不是所有用户字段。

    【讨论】:

    • 使用map 解决了这个问题。我将助手更改为:User.find_each.map { |u| u.name },并将视图更改为:&lt;%= get_users.join(' ') %&gt;
    【解决方案2】:

    你也可以像下面这样使用,

      <%= User.all.map(&:name).join(' ') %>
    

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 1970-01-01
      • 2012-12-30
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      相关资源
      最近更新 更多