如何以及在何处添加Devise视图辅助方法current_user boolean?

时间:2013-05-01 21:43:47

标签: ruby-on-rails devise

这是我想在我的观点中访问的方法:

def current_user?(user)
  user == current_user
end

我基本上需要检查当前用户是否在视图中不能与朋友交朋友。

<% unless current_user?(@user) %>
  <% if current_user.friendly?(@user)
    <%= render 'unfriend' %>
  <% else %>
    <%= render 'friend' %>
  <% end %>
<% end %>

Devise已经提供了current_user帮助方法。 如何以及在何处在Rails项目中添加此方法?

感谢您的帮助

3 个答案:

答案 0 :(得分:5)

在设计视图中使用应用程序帮助程序方法。 将class_eval代码放在Devise初始化程序的底部,就在Devise.setup块之后。

配置/初始化/ devise.rb

Devise.setup do |config|
  # ... existing Devise configuration, no modification necessary to include helper(s) ...
end

修改

Devise::Mailer.class_eval do
  helper :application # include "ApplicationHelper", adjust to suit your needs
end

答案 1 :(得分:1)

在我看来,您可以简单地在视图上添加比较,如下所示:

<% if current_user != @user %>
  <% if current_user.friendly?(@user)
    <%= render 'unfriend' %>
  <% else %>
    <%= render 'friend' %>
  <% end %>
<% end %>

无论如何,如果您仍想使用该方法,您可以在User.rb中创建一个方法

def equal_user?(another_user)
  another_user == self
end

并在视图中

<% if @user.equal_user?(current_user) %>

答案 2 :(得分:1)

我最初在application_helper.rb文件中犯了一个错误。

我使用了实例变量current_user?(@user)而不是局部变量current_user?(user)

如果我没有使用Devise,我会将helper方法放在会话助手中。所以我认为它可以在appication助手中起作用,但不是正面的。

感谢@JesseWolgamott