写一个方法不显示私有资源,除非它是当前用户?

时间:2012-08-25 19:34:33

标签: ruby-on-rails ruby ruby-on-rails-3

我的Product模型具有属性private。我想创建一种方法,允许当前用户能够选择他们的私有产品和仅private = false的其他产品。

class Product < ActiveRecord::Base
  attr_accessible :name, :private
  belongs_to :user

  def permission
    unless self.current_user
      unless self.private
      end
    end
  end
end

它是这样开始的吗?我该怎么写这个方法?目标是将其放在选择菜单中。

1 个答案:

答案 0 :(得分:2)

我会为此创建一个类方法,您可以将current_user传递给

class Product < ActiveRecord::Base
  attr_accessible :name, :private
  belongs_to :user

  def self.for_user_or_public(user)
    where("user_id = ? or private = ?", user.id, false)
  end
end

用法:

products = Product.for_user_or_public(current_user)

至于选择,以下内容应该有效

<%= f.collection_select :owner_id, Product.for_user_or_public(current_user), :user_id, :name, { :include_blank => true } %>