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 とさまざまなパーシャルの読み込みから始まります。ここで達成しようとしているのは、ユーザーが持っている権限に応じて拡張されるメニューです。にログインしましたか? そして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

どんな助けでも大歓迎です!また、ビューでチェックされるブール型のインスタンス変数を設定するために両方の logged_in 関数を取得しようとしましたが、これは機能しましたが、いつ設定されたかに依存していたため、常にではありませんでした。ヘルパーで同様のメソッドを作成し、ビューから呼び出すことも試みましたが、それも機能しませんでした。

4

1 に答える 1

0

あなたの問題はadmin_logged_inのこの行だと思いますか?

user = User.find_by_id[:user_id]

find_by_id の末尾に括弧を使用すると、シンボルがパラメーターとして渡されず、パラメーターなしで直接 find_by_id が呼び出されます。また、find_by_id にはパラメーターが必要です。params ハッシュで :user_id を使用できると仮定すると、代わりに次のようなことができます。

user = User.find_by_id(params[:user_id])
于 2012-05-11T22:50:58.973 に答える