参数
首先,你确定你打算使用params[:page_1]
- 如果你正在发送?page=x
,它只是params[:page]
方法
其次,您的undefined method
错误是因为您没有调用有效的 ActiveRecord 对象:
def index
@conversations = @mailbox.conversations.delete_if do |c|
receipts = c.receipts_for @master
(receipts.where(deleted: true).count == receipts.count)
end
@conversations = @conversations.page(params[:page_1]).per(9)
end
是什么@conversations
?
Kaminari和Will_Paginate都覆盖了您将从控制器/模型中进行的 SQL 查询。这意味着您必须在 ActiveRecord 调用中调用他们的page
&方法:per
根据文档:
一切都是可链接的方法,更少的“Hasheritis”。你知道,这就是 Rails 3 的方式。分页值没有特殊的集合类或任何东西,而是使用通用 AR::Relation 实例。所以,当然你可以在分页器范围之前或之后链接任何其他条件
我相信你会更好地做这样的事情:
def index
@mailbox.conversations.each do |c|
receipts = c.receipts_for @master
c.destroy if (receipts.where(deleted: true).count == receipts.count)
end
@conversations = @mailbox.conversations.page(params[:page]).per(9)
end
更新
如果您不想要destroy
您的项目,您可以使用ActiveRecord 关联扩展,如下所示:
#app/controllers/your_controller.rb
def index
@conversations = @mailbox.conversations.receipts.page(params[:page]).per(9)
end
#app/models/model.rb
Class Model < ActiveRecord::Base
has_many :conversations do
def receipts
receipts = joins(:receipts_for).select("COUNT(*)")
proxy_association.target.delete_if do
receipts.where(deleted: true) == receipts
end
end
end
end
这需要调整,但希望能给你一些关于你能做什么的想法