Rails 中的“stringify_keys"是什么以及出现此错误时如何解决 [英] What is `stringify_keys' in rails and how to solve it when this error comes

查看:40
本文介绍了Rails 中的“stringify_keys"是什么以及出现此错误时如何解决的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序的部分文件中,我有以下代码片段用于显示用户导航(通过设计):-

In a partial file of my application I have the following code snippet for displaying user navigation(through Devise):-

<ul class="nav pull-right">
  <% if user_signed_in? %>
      <li>
        <%= current_user.email do %>
        <i class=" icon-user icon-black"></i>
        <% end %>
      </li>
     <li>
       <%= link_to "Your Links", profiles_index_path do %>
       <i class=" icon-user icon-black"></i>
       <% end %>
     </li> 
     <li>
       <%= link_to "Sign out", destroy_user_session_path, :method => 'delete' do %>
       <i class=" icon-user icon-black"></i> 
       <% end %>
    </li>

   <% else %>
     <li>
      <%= link_to "Login", new_user_session_path do %> 
      <i class=" icon-lock"></i>  
      <% end %>
    </li>
    <li>
      <%= link_to "Sign up", new_user_registration_path do %>
      <i class=" icon-home"></i>
      <% end %>
    </li>
  <% end %>
</ul>

但我收到一条错误消息:-

But I'm getting an error saying:-

undefined method `stringify_keys' for "/users/sign_in":String

现在我的问题是:-

  1. 一般来说,`stringify_keys' 是什么??
  2. 如何在我的代码中解决这个问题???

谢谢...

推荐答案

1) stringify_keys 是一种在散列上调用以将其键从符号转换为字符串的方法.它是由 Rails 添加的——它不是标准的 Ruby 方法.在文档中.

1) stringify_keys is a method that is called on a hash to convert its keys from symbols to strings. It's added by Rails - it's not a standard Ruby method. Here it is in the docs.

{:a => 1, :b => 2}.stringify_keys # => {"a" => 1, "b" => 2}

2) 这意味着您的代码正在将 "/users/sign_in" 传递到需要散列的地方.仔细检查发现您正在混合和匹配两种形式的 link_to:

2) This means that your code is passing "/users/sign_in" somewhere that is expecting a hash. Closer inspection reveals that you are mixing and matching two forms of link_to:

# specify link contents as an argument
link_to "The text in the link", "/path/to/link", some: "options"

# specify link contents in a block
link_to "/path/to/link", some: "options" do
  "The text in the link"
end

如您所见,您正在尝试同时进行:

As you can see you are trying to do both:

<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' do %>
  <i class=" icon-user icon-black"></i> 
<% end %>

并且 Rails 期望块形式中的第二个参数是选项哈希,因此它在其上调用 stringify_keys 导致您的错误.

and Rails expects the second argument in the block form to be the options hash, so it is calling stringify_keys on it which is causing your error.

将这些链接改为如下所示:

Change those links to look like this instead:

<%= link_to destroy_user_session_path, :method => 'delete' do %>
  <i class=" icon-user icon-black"></i> Sign out 
<% end %>

这篇关于Rails 中的“stringify_keys"是什么以及出现此错误时如何解决的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆