说,我有一个名为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
答案 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)
从特定用户获取已发布的列表。