可以在集合上调用方法吗?

时间:2014-04-24 13:50:12

标签: ruby-on-rails ruby-on-rails-4

可以吗

current_user.posts.do_changes_and_return_collection

而不是

Post.where(user_id: current_user.id).do_changes_and_return_collection

并处理方法内的集合?

2 个答案:

答案 0 :(得分:1)

我相信在Post模型上你想要这样的东西:

 def self.do_changes_and_return_collection
   update_all(deleted: false) # Just an example.
   where(submited: true)
 end

您可以致电:submiteds = current_user.posts.do_changes_and_return_collection

注意:update_all不会触发验证和回调

编辑:获取关系所有者
User中,您必须扩展has_many关系:

has_many :posts do
  def owner
    proxy_association.owner
  end
end

调用current_user.posts.owner您将获得current_user

答案 1 :(得分:0)

是的,这是可能的。因为你必须使用scope

实施例

class Post < ActiveRecord::Base
  scope :do_changes_and_return_collection, -> { where(active: true) }
end

然后你可以打电话:

Post.where(user_id: current_user.id).do_changes_and_return_collection

请参阅scopes