Rails 辅助方法 return NilClass
Rails helper method return NilClass
我在 User#index
视图中有此代码:
<%= User.find_each do |user| %>
<%= user.name %>
<% end %>
哪个returns用户名:
user1 user2 user3 ...
然后我将此代码移至 UserHelper
:
module UserHelper
def get_users
User.find_each do |user|
user.name
end
end
end
并从 User#index
视图调用它:
<%= get_users %>
问题是这没有返回任何用户。如果我使用 <%= get_users.class %>
,它会输出 NilClass
。为什么辅助方法不返回用户名?
您的辅助方法隐式地 return 调用 find_each
的结果,这与 return 用户名集合不同。
把它想象成 运行ning 5.times { |n| puts n }
:那有什么价值?不是“0 1 2 3 4”,而是“5”,因为 times
return 是它被调用的内容,而不是其块中的 运行。
顺便说一句,您的原始代码 return 完全相同——您依赖 find_each
块内的副作用,即将 user.name
附加到响应。
如果您想要 return 您想要 map
/等的用户名集合。并获取每个用户的姓名。或者,IIRC,您可以进行查找和采摘,这样您就只能取回用户的姓名,而不是所有用户字段。
你也可以像下面这样使用,
<%= User.all.map(&:name).join(' ') %>
我在 User#index
视图中有此代码:
<%= User.find_each do |user| %>
<%= user.name %>
<% end %>
哪个returns用户名:
user1 user2 user3 ...
然后我将此代码移至 UserHelper
:
module UserHelper
def get_users
User.find_each do |user|
user.name
end
end
end
并从 User#index
视图调用它:
<%= get_users %>
问题是这没有返回任何用户。如果我使用 <%= get_users.class %>
,它会输出 NilClass
。为什么辅助方法不返回用户名?
您的辅助方法隐式地 return 调用 find_each
的结果,这与 return 用户名集合不同。
把它想象成 运行ning 5.times { |n| puts n }
:那有什么价值?不是“0 1 2 3 4”,而是“5”,因为 times
return 是它被调用的内容,而不是其块中的 运行。
顺便说一句,您的原始代码 return 完全相同——您依赖 find_each
块内的副作用,即将 user.name
附加到响应。
如果您想要 return 您想要 map
/等的用户名集合。并获取每个用户的姓名。或者,IIRC,您可以进行查找和采摘,这样您就只能取回用户的姓名,而不是所有用户字段。
你也可以像下面这样使用,
<%= User.all.map(&:name).join(' ') %>