0

Backbone.jsフロントエンドを備えたシンプルなrails3.2アプリがあります。before_filterバックエンドで次のヘルパーを定義しています。

# my before_filter placed in most controllers
def require_user
  unless logged_in?
    redirect_to '/#login'
  end
end

def logged_in?
  !!current_user
end

def current_user
  @_current_user ||= session[:user_id] && Appuser.find_by_id(session[:user_id])
end

これは、ほとんどのアクションへのアクセスをログインユーザーに制限するのに最適です。<script>ただし、メインのアプリケーションテンプレート(haml)の下部にタグを付けてBackbone.jsコレクションにデータをブートストラップしています。

!!!
%html{:lang => "en"}
  %head
    %title InfoUser
    = stylesheet_link_tag    "application", :media => "all"
    = javascript_include_tag "application"
    = csrf_meta_tags
    %script 
      $(document).ready(function(){ App.init(); });

  %body

    -# Layout markup

    :javascript
      projects.reset(#{Project.all.to_json})
      groups.reset(#{Group.all.to_json})
      users.reset(#{User.all.to_json})

  = render "layouts/templates"

問題は、認証されていないユーザーがアプリにアクセスしてすぐにログインページにリダイレクトされた場合でも、このブートストラップスクリプトがページの下部に追加され、すべてのデータがコレクションに表示されることです。

ユーザーのステータスをチェックする方法はhamlにありますか、それともユーザーが認証されるまで待機するブートストラップを処理する別の方法がありますか?

4

1 に答える 1

1

ユーザーがログインしているときにのみ実行する部分がわかりませんが、次のように実行できます。

- if logged_in?
  -# code you want to run here

たとえば、

- if logged_in?
  :javascript
    $(document).ready(function(){ App.init(); });
于 2012-07-09T23:16:16.873 に答える