0

最近、自分のページに管理者ユーザーを追加しましたが、「作成」機能は機能しなくなりましたが、「編集」機能は引き続き機能します。新しいアイテムを作成しようとしてもエラーは発生しません。

application_controller.rb:

class ApplicationController < ActionController::Base
  protect_from_forgery

before_filter :is_admin, only: [:new,  :create, :edit, :update, :delete, :destroy, :admin]

helper_method :admin?

protected

  def admin?
  session[:password] == 'pass'
  end


def authorize
  unless admin?
    flash[:error] = "unauthorized access"
    redirect_to root_path
    false
  end
 end

def is_admin
      redirect_to root_path, notice: "You are not authorized for that." unless admin?
    end

end

before_filter を取り出しても、まだ機能しません。

members_controller.rb

  def new
    @member = Member.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @member }
    end
  end

  def edit
    @member = Member.find(params[:id])
  end

  def create
    @member = Member.new(params[:member])

    respond_to do |format|
      if @member.save
        format.html { redirect_to @member, notice: 'Member was successfully created.' }
        format.json { render json: @member, status: :created, location: @member }
      else
        format.html { render action: "new" }
        format.json { render json: @member.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    @member = Member.find(params[:id])

    respond_to do |format|
      if @member.update_attributes(params[:member])
        format.html { redirect_to @member, notice: 'Member was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @member.errors, status: :unprocessable_entity }
      end
    end
  end

私のroutes.rb にはresources :members

私の作成が突然終了したのに、他のすべての機能がまだ機能している理由はありますか? 「メンバー」だけでなく、すべてのページでこのようになっています

4

3 に答える 3

1

あなたのis_admin機能を見せてもらえますか?それが戻ってくるfalsenil、メンバーと電気ショック療法を作成するときかもしれませんtrue。メンバーを更新するとき。

PSRubyのように名前の付いたメソッドを作成しないでくださいis_admin。それを呼ぶ方が良いadmin?です;)

于 2012-05-19T20:37:58.187 に答える
0

ああ-irbでこれを試してみてください:

> "123" unless true
=> nil

ユーザーが管理者の場合、falseとして解釈されるnilを返し、フィルターはそれ以上の実行を停止します。あなたはこのようなことをするためにそれを必要とします:

def is_admin
  admin? || redirect_to(root_path, notice: "You are not authorized for that.")
end
于 2012-05-19T21:05:54.097 に答える
0

routes.rb ファイル内のすべてのリソースを他のすべてよりも先にファイルの先頭に移動することで、問題を解決しました。なぜこれが問題だったのかは完全にはわかりませんが、現在はすべて機能しています。

于 2012-05-20T19:07:37.893 に答える