簡體   English   中英

Rails 3,僅在用戶登錄時才呈現部分內容

[英]Rails 3, only rendering partial if a user is logged in

在 Rails 3.1 應用程序上,我有一個名為user_logged_in? 來自 Devise,我想用它來選擇性地渲染部分。 這是 layouts/application.html.erb 中的代碼:

<% if user_logged_in? %>
<%= render :partial => "home/statusbar" %>
<% end %>

它使用來自不同 controller 的部分。 這是部分:

<div id="status_bar">  
  Signed in as <%= link_to current_user.name, edit_user_registration_path %>
</div>

current_user.name (未定義的方法)發生錯誤,因為current_usernil 我可以移動user_logged_in? 檢查部分內部,但我認為如果它在視圖中會稍微更有效率。

您能否指導我了解最佳實踐是什么,或者我如何克服未定義的方法錯誤? Rails 檢查模板的代碼是否正常,即使它位於失敗的if塊中?

它看起來像user_logged_in? 是哪里出了問題。如果你改變它,它會起作用嗎?

<% if current_user.present? %>
  <%= render :partial => "home/statusbar" %>
<% end %>

我熟悉 Devise,但不熟悉user_logged_in? 方法 - 你自己定義的嗎? 視圖中使用的普通助手是user_signed_in? . 另外,請嘗試以下操作:

<% puts user_logged_in?.inspect %>
<% puts user_signed_in?.inspect %>

在您視圖中的 if 語句上方,並檢查您的日志以確保您的調用正確返回falseuser_signed_in?也應該返回false )。 您不應該在該部分中收到 nil 錯誤,除非它實際上正在呈現(意味着代碼輸入了 if 語句)。

我找到了解決方案,看來

user_logged_in?

不再使用,而是您需要使用

user_signed_in?

因此,使用您提供的代碼應該可以工作:

<% if user_signed_in? %>
  <%= render :partial => "home/statusbar" %>
<% end %>

這段代碼為我呈現了一部分。

該代碼正在運行,ruby 是鴨子類型和動態的,所有檢查都在運行時進行。 所以你需要檢查你的條件。 嘗試

<% if false %>
  <%= render :partial => "home/statusbar" %>
<% end %>

看看它是否仍然失敗。 更好的解決方案是

<% if current_user %>
  <%= render :partial => "home/statusbar" %>
<% end %>

我不熟悉 devise 但這應該可以工作因為如果沒有人登錄,當前用戶將為零

有一個更短的方法來渲染你的部分有條件

<%= render(partial: "home/statusbar") if current_user.present? %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM