Ruby On Rails:创建停止工作但Update仍然有效

时间:2012-05-19 20:21:11

标签: ruby-on-rails admin

我最近在我的页面中添加了一个管理员用户,现在我的“创建”功能不再有效,但我的“编辑”功能仍然可以。当我尝试创建一个新项目时,我没有收到任何错误。

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

为什么我的创作突然退出我的所有想法,但所有其他功能仍然有效?对于我的所有页面都是如此,而不仅仅是“成员”

3 个答案:

答案 0 :(得分:1)

你能展示你的is_admin功能吗?创建成员和false等时可以返回niltrue。当你更新成员时。

P.S。不要在Ruby中创建名为is_admin的方法。最好称之为admin?;)

答案 1 :(得分:0)

啊 - 在irb中试试这个:

> "123" unless true
=> nil

当用户是管理员时,它会返回nil,这将被解释为false,并且过滤器会停止进一步执行。你需要它做这样的事情:

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

答案 2 :(得分:0)

我通过将routes.rb文件中的所有资源移到文件顶部之前解决了这个问题。我不完全确定为什么会出现问题,但现在一切正常。