devise omniauth google oath error : undefined method `stringify_keys' for "/users/auth/google_oauth2":String

devise omniauth google oath error : undefined method `stringify_keys' for "/users/auth/google_oauth2":String

在将设计与 omniauth-google-oauth2 gem 一起使用时,会在使用 Google 登录的部分中生成 link。默认代码不呈现 links.

这是自动生成的片段(我添加了一些基于 bootstrap 的样式)

<%- if devise_mapping.omniauthable? %>
  <%- resource_class.omniauth_providers.each do |provider| %>
    <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider), class: "btn btn-block btn-social btn-google" do %>
        <span class="fa fa-google"></span>
    <%end%>
    <br />
  <% end -%>
<% end -%>

这行不通,我尝试了 fiddle 了一下,想出了

<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}",  user_google_oauth2_omniauth_authorize_path, class: "btn btn-block btn-social btn-google" do %> 
    <span class="fa fa-google"></span>
<%end%>

但是 none 个选项有效

已排序,问题出在我使用 link 的方式上,我将其更改为一个块,因为我想使用社交登录 Bootstrap 按钮

我自己和其他来这里的人请注意post:

当您将 link_to 转换为块时,您不提供 link 文本参数,该文本必须进入块

这是工作版本

<%- if devise_mapping.omniauthable? %>
  <%- resource_class.omniauth_providers.each do |provider| %>
    <%= link_to omniauth_authorize_path(resource_name, provider), class: "btn btn-block btn-social btn-google" do %> 
        <span <span class="fa fa-google"></span> Sign in with <%=OmniAuth::Utils.camelize(provider)%>
    <%end%>
    <br />
  <% end -%>
<% end -%>