在我的应用程序的部分文件中,我有以下代码片段用于显示用户导航(通过设计):-
<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
现在我的问题是:-
- 什么是 ' stringify_keys'一般??
- 我如何解决这个在我的代码??
谢谢…
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 %>
根据documentat stringify_keys将尝试将所有键转换为字符串。因此,在简单的工作中,该方法期望具有键值的东西,并将其键转换为字符串。
在你的例子中,你的User对象很可能是空的或者一个计划字符串。这不是工作尝试张贴完整的错误日志