Rails Devise/Invitable
Rails Devise/Invitable
我有一个 Rails 带有设计和 devise_invitable 的应用程序(链接到关于覆盖控制器的官方文档),我做了一个 devise_invitable invitations_controller.rb
以显示 devise/invitations/new.html.erb 中当前受邀用户的列表。设计和 devise_invitable 视图分别在 app/views/devise
和 app/views/devise/invitations
中,我的 devise/devise_invitable 控制器在 app/controllers/users/
中。 Rails 在我的循环中的 invitations/new
视图中抛出一个 undefined method 'each' for NilClass
:
# 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 时,错误消失了,它显示了当前邀请的用户,但这会产生一个更大的问题,即应用程序现在使用 devises/devise_invitable 的默认视图。
原来罪魁祸首是我的 super 语句,渲染被调用所以它实际上从未到达@invited_users,我只是将它移到下面
我有一个 Rails 带有设计和 devise_invitable 的应用程序(链接到关于覆盖控制器的官方文档),我做了一个 devise_invitable invitations_controller.rb
以显示 devise/invitations/new.html.erb 中当前受邀用户的列表。设计和 devise_invitable 视图分别在 app/views/devise
和 app/views/devise/invitations
中,我的 devise/devise_invitable 控制器在 app/controllers/users/
中。 Rails 在我的循环中的 invitations/new
视图中抛出一个 undefined method 'each' for NilClass
:
# 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 时,错误消失了,它显示了当前邀请的用户,但这会产生一个更大的问题,即应用程序现在使用 devises/devise_invitable 的默认视图。
原来罪魁祸首是我的 super 语句,渲染被调用所以它实际上从未到达@invited_users,我只是将它移到下面