为什么 `where` 在 Rails 中给出 "undefined method" 错误?
Why does `where` give an "undefined method" error in Rails?
我正在尝试获取具有特定属性的所有反馈。我正在使用此代码:
def index
feedbacks = Feedback.all
if params[:tag]
@average_customer_rating = feedbacks.where('buyer_feedback_date is not null').rated(Feedback::FROM_BUYERS).average(:buyer_rating) || 0
@products = Product.includes(:images).tagged_with(params[:tag]).order('DESC').limit(22)
else
@products = Product.includes(:images).all
@average_customer_rating = feedbacks.where('buyer_feedback_date is not null').rated(Feedback::FROM_BUYERS).average(:buyer_rating) || 0
end
end
和 Rails 显示此错误:
undefined method `where' for []:Array
为什么我不能在这里使用 where
,我该如何解决?
Why can't I use where
on an array?
因为Array
class没有实例方法调用where
.
因为 feedbacks.class
是 Array
,你得到一个错误。
您有两个选择:
如果 Feedback
是您的 ActiveRecord
模型,您可能会使用 Feedback.where('buyer_feedback_date is not null')
。
在Rails3.x、all
returns一个数组中:
feedbacks = Feedback.all # <- an array
feedbacks.where(...) # <- fails
要获得 ActiveRecord::Relation
,您必须使用 scoped
:
feedbacks = Feedback.scoped # <- an ActiveRecord::Relation
feedbacks.where(...) # <- works
有关更多示例,请参阅 Working with scopes。
请注意,Rails 4 中不再需要这种区分 - scoped
已被弃用,取而代之的是 all
,现在 returns 和 ActiveRecord::Relation
。
反馈 = Feedback.all
为什么要查询此 table 中的每个条目以获得
feedbacks.where('buyer_feedback_date is not null').额定(反馈::FROM_BUYERS).平均(:buyer_rating) || 0
试试这个 =>
@average_customer_rating =Feedback.where('buyer_feedback_date is not null').额定(反馈::FROM_BUYERS).平均(:buyer_rating) || 0
其他
@average_customer_rating = Feedback.where('buyer_feedback_date is not null').额定(反馈::FROM_BUYERS).平均(:buyer_rating) || 0
应将其范围限定为 cust_feedback
我正在尝试获取具有特定属性的所有反馈。我正在使用此代码:
def index
feedbacks = Feedback.all
if params[:tag]
@average_customer_rating = feedbacks.where('buyer_feedback_date is not null').rated(Feedback::FROM_BUYERS).average(:buyer_rating) || 0
@products = Product.includes(:images).tagged_with(params[:tag]).order('DESC').limit(22)
else
@products = Product.includes(:images).all
@average_customer_rating = feedbacks.where('buyer_feedback_date is not null').rated(Feedback::FROM_BUYERS).average(:buyer_rating) || 0
end
end
和 Rails 显示此错误:
undefined method `where' for []:Array
为什么我不能在这里使用 where
,我该如何解决?
Why can't I use
where
on an array?
因为Array
class没有实例方法调用where
.
因为 feedbacks.class
是 Array
,你得到一个错误。
您有两个选择:
如果 Feedback
是您的 ActiveRecord
模型,您可能会使用 Feedback.where('buyer_feedback_date is not null')
。
在Rails3.x、all
returns一个数组中:
feedbacks = Feedback.all # <- an array
feedbacks.where(...) # <- fails
要获得 ActiveRecord::Relation
,您必须使用 scoped
:
feedbacks = Feedback.scoped # <- an ActiveRecord::Relation
feedbacks.where(...) # <- works
有关更多示例,请参阅 Working with scopes。
请注意,Rails 4 中不再需要这种区分 - scoped
已被弃用,取而代之的是 all
,现在 returns 和 ActiveRecord::Relation
。
反馈 = Feedback.all
为什么要查询此 table 中的每个条目以获得
feedbacks.where('buyer_feedback_date is not null').额定(反馈::FROM_BUYERS).平均(:buyer_rating) || 0
试试这个 =>
@average_customer_rating =Feedback.where('buyer_feedback_date is not null').额定(反馈::FROM_BUYERS).平均(:buyer_rating) || 0
其他
@average_customer_rating = Feedback.where('buyer_feedback_date is not null').额定(反馈::FROM_BUYERS).平均(:buyer_rating) || 0
应将其范围限定为 cust_feedback