2013-01-22 20 views
6

在我的應用程序的部分文件,以解決它,我有(通過設計)顯示用戶導航下面的代碼片段: -什麼是軌道`stringify_keys',以及如何在這個錯誤出現

<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 "https://stackoverflow.com/users/sign_in":String 

現在我的問題是: -

  1. 什麼是`stringify_keys一般??
  2. 如何在我的代碼中解決這個問題?

謝謝...

回答

23

1)stringify_keys是一個方法,在哈希上調用它的關鍵字從符號轉換爲字符串。它由Rails添加 - 它不是標準的Ruby方法。 Here it is in the docs

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

2)。這意味着你的代碼是通過"https://stackoverflow.com/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 %> 
+0

不錯的解釋:) – sameera207

+0

它解決了我的問題...謝謝@Andy – Siddharth

+0

工作的偉大的謝謝你 – santosh

0

按照該documentat stringify_keys將嘗試所有的鍵轉換爲字符串。因此,在簡單的作品中,該方法需要鍵值的值,並將其轉換爲字符串。

在你的情況下,你的用戶對象可能是空的或計劃字符串。這是沒有 工作嘗試發佈完整的錯誤日誌

+0

讓我提你的東西,當我加入「做」和「結束」狀態,以我的「的link_to」幫手這種錯誤發生。也就是說,如果我的的link_to塊簡單地是這樣的: -

  • <%=的link_to 「登出」,destroy_user_session_path,:方法=> '刪除' %>
  • Siddharth

    +0

    你可以用你的'do''end'標籤寫link_to幫手 – sameera207

    +0

    好的我已經從@Andy答案解答了......感謝您的幫助... – Siddharth

    相關問題