Sid*_*rth 7 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
在我的应用程序的部分文件中,我有以下代码片段用于显示用户导航(通过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>
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误说: -
undefined method `stringify_keys' for "/users/sign_in":String
Run Code Online (Sandbox Code Playgroud)
现在我的问题是: -
谢谢...
And*_*nes 25
1)stringify_keys是一个在哈希上调用的方法,用于将其键从符号转换为字符串.它是由Rails添加的 - 它不是标准的Ruby方法.这是在文档中.
{:a => 1, :b => 2}.stringify_keys # => {"a" => 1, "b" => 2}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,您正在尝试两者兼顾:
<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' do %>
<i class=" icon-user icon-black"></i>
<% end %>
Run Code Online (Sandbox Code Playgroud)
和Rails期望块形式中的第二个参数是选项哈希,因此它会调用stringify_keys它导致您的错误.
将这些链接更改为以下内容:
<%= link_to destroy_user_session_path, :method => 'delete' do %>
<i class=" icon-user icon-black"></i> Sign out
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9837 次 |
| 最近记录: |