什么是轨道`stringify_keys',以及如何在这个错误来解决这个问题(What is

2019-08-07 18:23发布

在我的申请的部分文件我有(通过设计)显示用户导航下面的代码片断: -

<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>

但我发现了一个错误说: -

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

现在,我的问题是: -

  1. 什么是`stringify_keys'一般?
  2. 如何在我的代码解决这个???

谢谢...

Answer 1:

1) stringify_keys是一个被称为一个散列其键从符号转换为字符串的方法。 它是由Rails的补充 - 它不是一个标准的Ruby方法。 这是在文档中 。

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

2)这意味着你的代码是通过"/users/sign_in"的地方,期待一个哈希值。 仔细检查发现,你是混合和匹配两种形式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

正如你可以看到你正在尝试做两个:

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

和Rails预计以块形式的第二个参数是选择的哈希,因此呼吁stringify_keys就可以了,这是造成你的错误。

更改这些链接看起来像这个:

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


Answer 2:

按照该documentat stringify_keys将尝试所有的键转换为字符串。 因此,在简单的工作方法愿与键值的东西,它的转换为字符串。

你的情况很可能是你的用户对象可能是空的或计划的字符串。 这是多年平均值的工作尝试张贴完整的错误日志



文章来源: What is `stringify_keys' in rails and how to solve it when this error comes