0

我申请了TODO List。

我安装了这个设计并想定义两种用户:

1) admin
2) worker

所以我将创建管理控制器。同时,我创建了 user_controller。

我想强制登录,以便让工作人员更新他的任务(完成与否),所以我尝试了:

class WorkersController < ApplicationController
  before_filter :authenticate_user!

ps,我的模型名称是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'
4

1 回答 1

2

首先,电子邮件不存储在会话中。登录后,Devise 有一个辅助方法 current_resource (在您的情况下为 current_user,因为单词“resource”被替换为模型名称)。你应该使用

@email = current_user.email

至于允许/禁止某些操作,您需要使用 CanCan https://github.com/ryanb/cancan

于 2012-12-25T22:06:48.970 回答