将评估移动到Rails3中的帮助程序

时间:2011-02-04 13:44:02

标签: ruby-on-rails

我有以下评估效果很好:

在我的listing / detail.html.erb视图中

<% if user_signed_in? && current_user.id == @listing.user_id %>

我在我的视图中多次使用它,所以我想把它作为辅助方法。

我可以在listing_helper文件中放置哪些代码,以便在我的视图中调用类似的内容:

<% if isListingOwner? %>

任何帮助将不胜感激。感谢。

4 个答案:

答案 0 :(得分:3)

当我需要做类似的事情时,我会使用Cancan。然后你可以写下这样的东西:

<% if can?(:update, @listing) %>
  Listing
<% end %>

在我看来更干净。

答案 1 :(得分:1)

将其放入/app/helpers文件夹。

Railscast有关于此主题的介绍教程 http://railscasts.com/episodes/64-custom-helper-modules

答案 2 :(得分:1)

所有好建议,但您需要添加到listing_helper.rb的代码是

def isListingOwner?
  user_signed_in? && current_user.id == @listing.user_id
end

就个人而言,我宁愿把检查放在模型中:

class Listing
  def owned_by?(user)
    user.id == self.user_id
  end
end

然后在你看来,你会写:

<% if @listing.owned_by(current_user) %>

如果您正在做很多此类事情,您可能需要查看基于角色的授权插件。

答案 3 :(得分:0)

如果您的belongs_to :user模型中有Listing,为什么不这么做?

if current_user == @listing.user

我假设您正在使用Devise或在用户未登录时从current_user返回nil的内容。