2012-05-11 11 views
0

私は現在Railsの趣味プロジェクトに取り組んでおり、Railsのよくある問題だと思うことに遭遇しました。私はいくつかの章とLyndaのチュートリアルを行ってきましたが、この問題のベストプラクティスは見つかりませんでした。多分、オンラインコミュニティが私を助けることができます。差別化されたアクセス制御。ベストプラクティス

は私のapplication.html.erbでは、私は、次のコードを追加しました:

<!DOCTYPE html> 
<html> 
<head> 
    <title>SioMeny</title> 
    <%= stylesheet_link_tag "application", :media => "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 
    <div id="wrapper"> 
    <header> 
     <h1>SiO Menysystem</h1> 
    </header> 
    <div id="site_menu"> 
     <%= render :partial => "shared/admin_menu" if admin_logged_in? %> 
     <%= render :partial => "shared/user_menu" if logged_in? %> 
     <%= render :partial => "shared/site_menu" %> 
    </div><!-- div#site_menu --> 
    <div id="main"> 
     <%= render :partial => "shared/flash", :locals => {:flash => flash} unless flash.nil? %> 
     <%= yield %> 
    </div> 
    </div><!-- div#wrapper --> 
</body> 
</html> 

私の問題は#site_menuに、異なるパーシャルの読み込みに開始されます。私がここで達成しようとしているのは、ユーザーが持つ特権に応じて拡大していくメニューです。 logged_in?とadmin_logged_in? application_controllerにあります。この時点で

class ApplicationController < ActionController::Base 
    protect_from_forgery 


    def login_required 
    unless logged_in? 
    flash[:notice] = "Du må være logget inn for å se denne siden" 
    redirect_to :controller => "user", :action => "login" 
    end 
end 

    def admin_required 
    unless admin_logged_in? 
    flash[:notice] = "Du må være logget inn som administrator for å se denne siden" 
    redirect_to :controller => "user", :action => "login" 
    end 
end 



    def logged_in? 
    if session[:user_id] 
    return true 
    end 
    return false 
end 

    def admin_logged_in? 
    if logged_in? 
     user = User.find_by_id[:user_id] 
    if user.is_admin? 
     return true 
    end 
    end 
    return false 
    end 


end 

私はエラーを取得する:

ArgumentError in Site#index 

Showing /Users/ola/Documents/Coding/SioMeny/app/views/layouts/application.html.erb where line #15 raised: 

wrong number of arguments (0 for 1) 
Extracted source (around line #15): 

12:  <h1>SiO Menysystem</h1> 
13:  </header> 
14:  <div id="site_menu"> 
15:  <%= render :partial => "shared/admin_menu" if admin_logged_in? %> 
16:  <%= render :partial => "shared/user_menu" if logged_in? %> 
17:  <%= render :partial => "shared/site_menu" %> 
18:  </div><!-- div#site_menu --> 
Rails.root: /Users/ola/Documents/Coding/SioMeny 

すべてのヘルプは大歓迎です!私はまた、両方の設定を取得しようとしましたが、ビューでチェックされているブール型のインスタンス変数を設定するために、これは機能しましたが、設定された時間に依存していました。私はヘルパーで同様のメソッドを作成してビューから呼び出そうとしましたが、それもうまくいきませんでした。

答えて

0

あなたの問題はadmin_logged_inにこの行があると思いますか? find_by_idの末尾に括弧を使用して

user = User.find_by_id[:user_id] 

、パラメータとして記号を通過しない、それだけで直接パラメータなしでfind_by_id呼び出します。また、find_by_idはパラメータを要求します。あなたのparamsハッシュで利用できる:user_idがあると仮定すると、代わりに次のようなことができます:

user = User.find_by_id(params[:user_id]) 
+0

ありがとうございました。それは長い時間がかかり、私はそれを見つけられませんでした:)ところで、あなたはレールでより多くのユーザタイプを扱うためのベストプラクティスを知っていますか? – olovholm

+0

問題ありません。 :)さまざまな権限を扱う一般的な方法のように、役割の使用があります。私は以下の宝石を見て、彼らは正しい方向にあなたを指し示すかもしれない:easy_roles、devise、cancan(またはcanable、またはauthority)。 – Adam

関連する問題