如何在设计视图模板外使用`resource_class.omniauth_providers`?

时间:2014-02-17 02:43:18

标签: ruby-on-rails devise omniauth

我在设计视图部分模板中使用resource_class

  <%- resource_class.omniauth_providers.each do |provider| %>
    <%= link_to "Connect to #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), class: "#{provider.to_s} omniauth" %>
  <% end -%>

工作正常。但是当我从另一个模型的视图加载这个部分时,我得到了这个错误。

undefined local variable or method `resource_class' for #<#<Class:0x007fa29be245d8>:0x007fa29bdf3708>

如何从其他模型的视图中使用resource_class

我希望用户可以通过模态对话框在我的应用中随处注册。

1 个答案:

答案 0 :(得分:2)

如果您在视图中对Devise的引用(可能不如通过resource_class那么好),则可以尝试使用resource_class.omniauth_providers而不是Devise.omniauth_providers。它将返回相同的提供商列表,假设您使用config.omniauth初始化程序中的devise.rb参数设置的提供程序与用户模型中的:omniauth_providers列表相同。如果没有,或者如果你有多个用户模型类并且它们都不允许使用相同的提供者登录,因此列出了不同的:omniauth_providers,那么这不适合你,但我猜这不太可能