这段代码运行良好,但我正在查看它并认为它可能更清洁。也许有一种更惯用的 ruby / rails 方式来做到这一点?顺序很重要,因为 member_of 范围必须在最后但在分页之前(返回集合而不是范围)
这样做的一个优点是很清楚发生了什么
@locations = Location.send(params[:type]) if type_sent_and_valid? #refine to a particular type if present
@locations = (@locations || Location.locatable).near(latlng_params) if latlng_sent? #refine to location
@locations = (@locations || Location).member_of(@interest_group.id).paginate(:page=>params[:page], :per_page=>20)
如果参数字符串是这样的:
?lat=50&lng=150&type=restaurant&page=1
然后它应该产生这个
Location.restaurant.near([50.0,150.0]).member_of(@interest_group).paginate(:page=>1, :per_page=>20)