मेरी विजेट मॉडल में मैं निम्नलिखित है:मैं रेल 3 में रंसैक के साथ स्कॉप्स का उपयोग कैसे कर सकता हूं?
def index
@q = Widget.accessible_to(current_user).search(params[:q])
@widgets = @q.result.order('created_at DESC')
end
कर:
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
}
आदर्श रूप में, मैं तो मेरे नियंत्रक में मेरे पास है, लूटना के खोज परिणामों के लिए एक फिल्टर के रूप में इस दायरे का उपयोग करना चाहेंगे
undefined method `search' for Array:0x007ff9b87a0300
मेरा अनुमान है कि कि लूटना एक ActiveRecord संबंध वस्तु और नहीं एक सरणी की तलाश में है: यह निम्न त्रुटि उत्पन्न करता है। क्या वैसे भी है कि मैं रेंसैक के लिए फ़िल्टर के रूप में अपने दायरे का उपयोग कर सकता हूं?
आपके वास्तविक प्रश्न से संबंधित नहीं है, लेकिन आपके दायरे का दूसरा भाग शायद आसानी से 'जॉइन (: widget_assignments) के रूप में लिखा जा सकता है। कहीं (' widget_assignments.role_id '=> user.role_ids) '? या 'user.roles.fetch (: id)'? मुझसे गलती भी हो सकती है :) –