我申请了TODO List。
我安装了设备并希望定义两种用户:
1) admin
2) worker
所以我将创建管理控制器。同时,我创建了user_controller。
我想强制登录,以便让工作人员更新他的任务(完成与否),所以我尝试了:
class WorkersController < ApplicationController
before_filter :authenticate_user!
p.s,我的模型名称是user.rb:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :lockable, :timeoutable, :confirmable and :activatable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation
# attr_accessible :title, :body
end
但是,:authenticate_user!不行。即使我退出,我也可以创建一个任务。
之后,我必须知道登录用户的邮件是什么(为了更新他的任务)。所以我必须写一些像:
def index
@email = params[:session][:email]
但是我收到了一个错误:
NoMethodError in WorkersController#index
undefined method `[]' for nil:NilClass
Rails.root: /home/alon/projects/TODOLIST
Application Trace | Framework Trace | Full Trace
app/controllers/workers_controller.rb:8:in `index'
答案 0 :(得分:2)
首先,电子邮件不存储在会话中。 登录后,Devise有一个帮助方法current_resource(在你的情况下为current_user,因为单词“resource”被替换为model name)。 你应该使用
@email = current_user.email
至于允许/禁止某些操作,您需要使用CanCan https://github.com/ryanb/cancan