TODO LIST与设计

时间:2012-12-25 21:37:43

标签: ruby-on-rails devise

我申请了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'

1 个答案:

答案 0 :(得分:2)

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

@email = current_user.email

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