我最近在我的页面中添加了一个管理员用户,现在我的“创建”功能不再有效,但我的“编辑”功能仍然可以。当我尝试创建一个新项目时,我没有收到任何错误。
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
为什么我的创作突然退出我的所有想法,但所有其他功能仍然有效?对于我的所有页面都是如此,而不仅仅是“成员”
答案 0 :(得分:1)
你能展示你的is_admin
功能吗?创建成员和false
等时可以返回nil
或true
。当你更新成员时。
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文件中的所有资源移到文件顶部之前解决了这个问题。我不完全确定为什么会出现问题,但现在一切正常。