2

Rails 3.1 での認証の実装について、Railscast #270 で見つかったRails Cast #270をフォローしてきました。私がやりたいことは、テンプレートに、ユーザーがログインしている場合にさまざまなリンクを表示する機能を持たせることです。これは次のようになります。

If user logged in
  Display link to Profile
  Display logout
If user logged out
 Display link to register
 Display link to login

RailsTutorial からいろいろなところへのリンクはわかると思いますが、ユーザーがサインインしているかどうかの見分け方に行き詰っています。

Railsチュートリアルを使用して、このスニペットを見つけました

 <% if signed_in? %>
     <li><%= link_to "Profile", current_user %> sfsdfsdf</li>
 <% end %>

セッションヘルパーに以下を入れるとうまくいきません:

    def signed_in?
      !@current_user.nil?  
end

これをどのように機能させますか?

4

2 に答える 2

6

を使用しcurrent_userます。

これだけ

 <% if current_user %>
     <li><%= link_to "Profile", current_user %> sfsdfsdf</li>
 <% end %>

ところでHAMLでは、それはちょうど

 -if current_user
   %li= 
     link_to "Profile", current_user, sfsdfsdf

(終わりが暗示されます-HTML<li>タグ(つまり</li>)とルビーifステートメントの両方!)
HAMLを使用していない人にとっては、これはあなたの食欲をそそるはずです:)

current_user 自体は @current_user を使用し、アプリケーション コントローラーで次のように設定されます。

  helper_method :current_user

  private

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end
于 2011-10-26T01:31:44.073 に答える
1

current_userメソッドを設定する必要があるようです。Railscast 270 で ryan bates が行う方法は次のとおりです。

class ApplicationController < ActionController::Base
  protect_from_forgery

  private

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

  # don't forget this line too 
  helper_method :current_user
end

application_controller.rb にそれがあることを確認してください。もう使用する必要はありませんがif signed_in、引き続き使用したい場合は引き続き機能するはずです

于 2011-10-26T01:58:44.193 に答える