Trong mô hình Widget của tôi, tôi đã điều sau đây:Làm cách nào để sử dụng phạm vi có Ransack trong Rails 3?
scope :accessible_to, lambda { |user|
if user.has_role?('admin')
self.all
else
roles = user.roles
role_ids = []
roles.each { |r| role_ids << r.id }
self.joins(:widget_assignments).where('widget_assignments.role_id' => role_ids)
end
}
Lý tưởng nhất, tôi muốn sử dụng phạm vi này như một bộ lọc cho kết quả tìm kiếm Ransack, vì vậy trong điều khiển của tôi, tôi có:
def index
@q = Widget.accessible_to(current_user).search(params[:q])
@widgets = @q.result.order('created_at DESC')
end
Làm điều này tạo ra lỗi sau:
undefined method `search' for Array:0x007ff9b87a0300
Tôi đoán rằng Ransack đang tìm đối tượng mối quan hệ ActiveRecord chứ không phải mảng. Có anyway mà tôi có thể sử dụng phạm vi của tôi như một bộ lọc cho Ransack?
Không liên quan đến câu hỏi thực tế của bạn, nhưng nửa sau của phạm vi của bạn có thể dễ dàng được viết dưới dạng 'join (: widget_assignments) .where ('widget_assignments.role_id' => user.role_ids)'? hoặc 'user.roles.fetch (: id)'? Tôi có thể sai mặc dù :) –