我有一个带设计的Rails应用程序和 devise_invitable (关于覆盖控制器的官方文档的链接),我已经做了一个devise_invitable invitations_controller.rb
来显示当前被邀请的列表devise / invitations / new.html.erb中的用户。 devise和devise_invitable视图分别位于app/views/devise
和app/views/devise/invitations
中,而我的devise / devise_invitable控制器位于app/controllers/users/
中。 Rails在我的循环中的undefined method 'each' for NilClass
视图中抛出invitations/new
:
# app/views/devise/invitations/new.html.erb
<% @invited_users.each do |invited| %>
omitting code...
<% end %>
# app/controllers/users/invitations_controller.rb
class Users::InvitationsController < Devise::InvitationsController
def new
super
# This is not empty, returns multiple records in console
@invited_users = User.where.not(invitation_sent_at: nil)
end
end
# config/routes.rb
...
devise_for :users, controllers: { registrations: 'users/registrations',
invitations: 'users/invitations' }
...
end
奇怪的是,当我将app / views / devise文件夹名称更改为app / views / users时,错误消失并显示当前受邀用户但这会产生更大的问题,即应用现在同时使用这两个用户设计/ devise_invitable的默认视图。
答案 0 :(得分:0)
原来,罪魁祸首是我的超级声明,渲染被调用所以它从未真正进入@invited_users,我只是将它移到了下面