返回集合的方法 - Ruby

时间:2015-08-14 21:40:27

标签: ruby-on-rails ruby methods collections iteration

说,我有一个名为posted_listings的方法,该方法应该运行ActiveRecord查询并返回User.listings的集合posted: true,其中 posted?是一个Listing类方法。到目前为止,我一直在做:

class Bar < ActiveRecord::Base
  def posted_listings
    posted_listings = []
    listings.each { |listing| posted_listings << listing if listing.posted? }
    posted_listing
  end
end

但每次这个查询运行时,我开始对我的技能(或缺乏技能)感到非常不满意。返回已发布列表集合的最有效方法是什么?

编辑:

posted?不是属性,它是一个类方法:

class Listing < ActiveRecord::Base
 def posted?
    true if quantity >= 1 && has_sellers? 
  end
end 

def has_sellers?
  sellers.count >=1 #association to Seller
end

2 个答案:

答案 0 :(得分:3)

我建议您在Error: Cannot read property 'None' of undefined stack: <unknown> index.ios.bundle:24759 require index.ios.bundle:254 <unknown> index.ios.bundle:23809 require index.ios.bundle:254 <unknown> index.ios.bundle:1508 require index.ios.bundle:254 <unknown> index.ios.bundle:1435 require index.ios.bundle:254 require index.ios.bundle:200 <unknown> index.ios.bundle:59178 URL: undefined line: undefined message: Cannot read property 'None' of undefinedhandleException @ ExceptionsManager.js:69handleErrorWithRedBox @ InitializeJavaScriptAppEngine.js:38ErrorUtils.reportFatalError @ error-guard.js:28require @ require.js:197(anonymous function) @ RunMainModule.js:1 模型中添加一个范围,如下所示:

Listing

然后你可以得到所有发布的列表:

scope :posted, -> { where(posted: true) }

如果您有兴趣,可以详细了解范围here

<强>更新

请尝试使用此范围:

@user.listings.posted

答案 1 :(得分:0)

你的问题对我来说不是那么清楚。

您可以尝试:

User.listings.where(posted: true)

获取所有用户发布的列表。

或者,说@user是用户实例:

@user.listings.where(posted: true)

从特定用户获取已发布的列表。