私は現在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
すべてのヘルプは大歓迎です!私はまた、両方の設定を取得しようとしましたが、ビューでチェックされているブール型のインスタンス変数を設定するために、これは機能しましたが、設定された時間に依存していました。私はヘルパーで同様のメソッドを作成してビューから呼び出そうとしましたが、それもうまくいきませんでした。
ありがとうございました。それは長い時間がかかり、私はそれを見つけられませんでした:)ところで、あなたはレールでより多くのユーザタイプを扱うためのベストプラクティスを知っていますか? – olovholm
問題ありません。 :)さまざまな権限を扱う一般的な方法のように、役割の使用があります。私は以下の宝石を見て、彼らは正しい方向にあなたを指し示すかもしれない:easy_roles、devise、cancan(またはcanable、またはauthority)。 – Adam