2014-01-30 110 views
1

我非常笨拙地用今天的Devise gem取代了我自己的认证系统(基于Michael Hartl的教程)。Devise的current_user不起作用?

我已经得到了大部分工作,但有很多与使用current_user有关的错误。

此,例如,不工作了:

<% if current_user.admin? && !current_user?(user) %> 
    | <%= link_to "delete", user, method: :delete, 
            data: { confirm: "You sure?" } %> 
<% end %> 

我以前在一个会议助手曾CURRENT_USER定义如下:

module SessionsHelper 

    def sign_in(user) 
    remember_token = User.new_remember_token 
    cookies.permanent[:remember_token] = remember_token 
    user.update_attribute(:remember_token, User.encrypt(remember_token)) 
    self.current_user = user 
    end 
end 
     def current_user=(user) 
     @current_user = user 
     end 

     def current_user 
     remember_token = User.encrypt(cookies[:remember_token]) 
     @current_user ||= User.find_by(remember_token: remember_token) 
     end 

     def current_user?(user) 
     user == current_user 
     end 

我与免掉,认为设计提供了相同的功能,但似乎并非如此。在几乎所有以前使用current_user的情况下,我现在都会获得undefined method current_user?'`。我希望能有一些全球性的东西可以使旧用法发挥作用?

任何指针非常赞赏。在我使用它的六个月中,我已经有了最糟糕的一天。

编辑:评论解释说我不再有current_user?定义。我试着加入下面我users_controller,但它似乎并没有已经奏效:

def current_user?(user) 
    user == current_user 
    end 
+1

至少在此处显示的内容中,您有'current_user'定义,但不是'current_user?'。 –

+0

对不起,我没有包含足够的旧代码。我只需要再次定义'current_user?'?如果是这样,因为我没有使用会话的概念? – Ossie

+1

Devise中没有'current_user?'方法,只有'current_user'。如果你在代码中的任何地方使用它,你需要在users_helper或application_helper中自己定义它。事实上,在任何帮手中,他们都可以在任何视图和控制器中工作。 –

回答

1

您与sessions_helper删除您current_user?(user)方法。现在Devise为你做所有必要的工作,但Devise只有current_user方法,没有current_user?(user)

你可以自己在任何助手中定义它,所有方法都可以在任何视图和任何控制器中使用。

事实上,如果你有很多条件,你需要检查用户是否是管理员,并且用户不是current_user。你可以为它做一个单独的帮手。但是,当我从迈克尔·哈特尔的教程记住,没有很多这样的块(:

喜欢的东西:

def not_admin?(user) 
    current_user.admin? && !current_user?(user) 
end 

所以,你可以重构你查看:

<% if not_admin?(user) %> 
    | <%= link_to "delete", user, method: :delete, 
            data: { confirm: "You sure?" } %> 
<% end %> 

你也可以使其更清楚:

| <%= link_to "delete", user, method: :delete, 
       data: { confirm: "You sure?" } if not_admin?(user) %> 
+1

谢谢。非常好地拼写出来。我在那里学到了很多东西。你是一个真正的专业人士。真的很感激它。 – Ossie

相关问题