Commit 518ec8308de685eb394b4a7005b9fe43032d7b49

Authored by Daniela Feitosa
2 parents 39a99d9d 90c996e4

Merge commit 'refs/merge-requests/233' of git://gitorious.org/noosfero/noosfero …

…into merge-requests/233

Conflicts:
	test/integration/routing_test.rb
app/controllers/public/not_found_controller.rb
@@ -2,4 +2,8 @@ class NotFoundController < ApplicationController @@ -2,4 +2,8 @@ class NotFoundController < ApplicationController
2 def index 2 def index
3 render_not_found 3 render_not_found
4 end 4 end
  5 +
  6 + def nothing
  7 + render :nothing => true, :status => 404
  8 + end
5 end 9 end
app/controllers/public/profile_controller.rb
@@ -49,36 +49,36 @@ class ProfileController < PublicController @@ -49,36 +49,36 @@ class ProfileController < PublicController
49 49
50 def communities 50 def communities
51 if is_cache_expired?(profile.communities_cache_key(params)) 51 if is_cache_expired?(profile.communities_cache_key(params))
52 - @communities = profile.communities.paginate(:per_page => per_page, :page => params[:npage]) 52 + @communities = profile.communities.includes(relations_to_include).paginate(:per_page => per_page, :page => params[:npage])
53 end 53 end
54 end 54 end
55 55
56 def enterprises 56 def enterprises
57 - @enterprises = profile.enterprises 57 + @enterprises = profile.enterprises.includes(relations_to_include)
58 end 58 end
59 59
60 def friends 60 def friends
61 if is_cache_expired?(profile.friends_cache_key(params)) 61 if is_cache_expired?(profile.friends_cache_key(params))
62 - @friends = profile.friends.paginate(:per_page => per_page, :page => params[:npage]) 62 + @friends = profile.friends.includes(relations_to_include).paginate(:per_page => per_page, :page => params[:npage])
63 end 63 end
64 end 64 end
65 65
66 def members 66 def members
67 if is_cache_expired?(profile.members_cache_key(params)) 67 if is_cache_expired?(profile.members_cache_key(params))
68 - @members = profile.members.paginate(:per_page => members_per_page, :page => params[:npage]) 68 + @members = profile.members.includes(relations_to_include).paginate(:per_page => members_per_page, :page => params[:npage])
69 end 69 end
70 end 70 end
71 71
72 def fans 72 def fans
73 - @fans = profile.fans 73 + @fans = profile.fans.includes(relations_to_include)
74 end 74 end
75 75
76 def favorite_enterprises 76 def favorite_enterprises
77 - @favorite_enterprises = profile.favorite_enterprises 77 + @favorite_enterprises = profile.favorite_enterprises.includes(relations_to_include)
78 end 78 end
79 79
80 def sitemap 80 def sitemap
81 - @articles = profile.top_level_articles 81 + @articles = profile.top_level_articles.includes([:profile, :parent])
82 end 82 end
83 83
84 def join 84 def join
@@ -264,7 +264,7 @@ class ProfileController < PublicController @@ -264,7 +264,7 @@ class ProfileController < PublicController
264 264
265 def profile_info 265 def profile_info
266 begin 266 begin
267 - @block = profile.blocks.find(params[:block_id]) 267 + @block = profile.blocks.find(params[:block_id]).includes(:box)
268 rescue 268 rescue
269 render :text => _('Profile information could not be loaded') 269 render :text => _('Profile information could not be loaded')
270 end 270 end
@@ -378,4 +378,8 @@ class ProfileController < PublicController @@ -378,4 +378,8 @@ class ProfileController < PublicController
378 @can_edit_profile ||= user && user.has_permission?('edit_profile', profile) 378 @can_edit_profile ||= user && user.has_permission?('edit_profile', profile)
379 end 379 end
380 helper_method :can_edit_profile 380 helper_method :can_edit_profile
  381 +
  382 + def relations_to_include
  383 + [:image, :domains, :preferred_domain, :environment]
  384 + end
381 end 385 end
app/controllers/public/search_controller.rb
@@ -46,7 +46,7 @@ class SearchController < PublicController @@ -46,7 +46,7 @@ class SearchController < PublicController
46 if !@empty_query 46 if !@empty_query
47 full_text_search ['public:true'] 47 full_text_search ['public:true']
48 else 48 else
49 - @results[@asset] = @environment.people.visible.send(@filter).paginate(paginate_options) 49 + @results[@asset] = visible_profiles(Person).send(@filter).paginate(paginate_options)
50 end 50 end
51 end 51 end
52 52
@@ -76,7 +76,7 @@ class SearchController < PublicController @@ -76,7 +76,7 @@ class SearchController < PublicController
76 full_text_search ['public:true'] 76 full_text_search ['public:true']
77 else 77 else
78 @filter_title = _('Enterprises from network') 78 @filter_title = _('Enterprises from network')
79 - @results[@asset] = @environment.enterprises.visible.paginate(paginate_options) 79 + @results[@asset] = visible_profiles(Enterprise, [{:products => :product_category}]).paginate(paginate_options)
80 end 80 end
81 end 81 end
82 82
@@ -84,7 +84,7 @@ class SearchController < PublicController @@ -84,7 +84,7 @@ class SearchController < PublicController
84 if !@empty_query 84 if !@empty_query
85 full_text_search ['public:true'] 85 full_text_search ['public:true']
86 else 86 else
87 - @results[@asset] = @environment.communities.visible.send(@filter).paginate(paginate_options) 87 + @results[@asset] = visible_profiles(Community).send(@filter).paginate(paginate_options)
88 end 88 end
89 end 89 end
90 90
@@ -310,4 +310,12 @@ class SearchController < PublicController @@ -310,4 +310,12 @@ class SearchController < PublicController
310 @all_facets = ret[:all_facets] 310 @all_facets = ret[:all_facets]
311 end 311 end
312 312
  313 + private
  314 +
  315 + def visible_profiles(klass, *extra_relations)
  316 + relations = [:image, :domains, :environment, :preferred_domain]
  317 + relations += extra_relations
  318 + @environment.send(klass.name.underscore.pluralize).visible.includes(relations)
  319 + end
  320 +
313 end 321 end
app/helpers/boxes_helper.rb
@@ -66,7 +66,7 @@ module BoxesHelper @@ -66,7 +66,7 @@ module BoxesHelper
66 66
67 def display_box_content(box, main_content) 67 def display_box_content(box, main_content)
68 context = { :article => @page, :request_path => request.path, :locale => locale } 68 context = { :article => @page, :request_path => request.path, :locale => locale }
69 - box_decorator.select_blocks(box.blocks, context).map { |item| display_block(item, main_content) }.join("\n") + box_decorator.block_target(box) 69 + box_decorator.select_blocks(box.blocks.includes(:box), context).map { |item| display_block(item, main_content) }.join("\n") + box_decorator.block_target(box)
70 end 70 end
71 71
72 def select_blocks(arr, context) 72 def select_blocks(arr, context)
app/models/article.rb
@@ -179,37 +179,23 @@ class Article < ActiveRecord::Base @@ -179,37 +179,23 @@ class Article < ActiveRecord::Base
179 end 179 end
180 180
181 named_scope :more_popular, :order => 'hits DESC' 181 named_scope :more_popular, :order => 'hits DESC'
182 -  
183 - # retrieves the latest +limit+ articles, sorted from the most recent to the  
184 - # oldest.  
185 - #  
186 - # Only includes articles where advertise == true  
187 - def self.recent(limit = nil, extra_conditions = {})  
188 - # FIXME this method is a horrible hack  
189 - options = { :page => 1, :per_page => limit,  
190 - :conditions => [  
191 - "advertise = ? AND  
192 - published = ? AND  
193 - profiles.visible = ? AND  
194 - profiles.public_profile = ? AND  
195 - ((articles.type != ? and articles.type != ? and articles.type != ?) OR articles.type is NULL)", true, true, true, true, 'UploadedFile', 'RssFeed', 'Blog'  
196 - ],  
197 - :include => 'profile',  
198 - :order => 'articles.published_at desc, articles.id desc'  
199 - }  
200 - if ( scoped_methods && scoped_methods.last &&  
201 - scoped_methods.last[:find] &&  
202 - scoped_methods.last[:find][:joins] &&  
203 - scoped_methods.last[:find][:joins].index('profiles') )  
204 - options.delete(:include)  
205 - end  
206 - if extra_conditions == {}  
207 - self.paginate(options)  
208 - else  
209 - with_scope :find => {:conditions => extra_conditions} do  
210 - self.paginate(options)  
211 - end 182 + named_scope :relevant_as_recent, :conditions => ["(articles.type != 'UploadedFile' and articles.type != 'RssFeed' and articles.type != 'Blog') OR articles.type is NULL"]
  183 +
  184 + def self.recent(limit = nil, extra_conditions = {}, pagination = true)
  185 + result = scoped({:conditions => extra_conditions}).
  186 + public.
  187 + relevant_as_recent.
  188 + limit(limit).
  189 + order(['articles.published_at desc', 'articles.id desc'])
  190 +
  191 + if !( scoped_methods && scoped_methods.last &&
  192 + scoped_methods.last[:find] &&
  193 + scoped_methods.last[:find][:joins] &&
  194 + scoped_methods.last[:find][:joins].index('profiles') )
  195 + result = result.includes(:profile)
212 end 196 end
  197 +
  198 + pagination ? result.paginate({:page => 1, :per_page => limit}) : result
213 end 199 end
214 200
215 # produces the HTML code that is to be displayed as this article's contents. 201 # produces the HTML code that is to be displayed as this article's contents.
app/models/enterprise.rb
@@ -17,7 +17,7 @@ class Enterprise < Organization @@ -17,7 +17,7 @@ class Enterprise < Organization
17 after_save_reindex [:products], :with => :delayed_job 17 after_save_reindex [:products], :with => :delayed_job
18 extra_data_for_index :product_categories 18 extra_data_for_index :product_categories
19 def product_categories 19 def product_categories
20 - products.map{|p| p.category_full_name}.compact 20 + products.includes(:product_category).map{|p| p.category_full_name}.compact
21 end 21 end
22 22
23 N_('Organization website'); N_('Historic and current context'); N_('Activities short description'); N_('City'); N_('State'); N_('Country'); N_('ZIP code') 23 N_('Organization website'); N_('Historic and current context'); N_('Activities short description'); N_('City'); N_('State'); N_('Country'); N_('ZIP code')
app/models/environment.rb
@@ -591,8 +591,8 @@ class Environment < ActiveRecord::Base @@ -591,8 +591,8 @@ class Environment < ActiveRecord::Base
591 end 591 end
592 592
593 has_many :articles, :through => :profiles 593 has_many :articles, :through => :profiles
594 - def recent_documents(limit = 10)  
595 - self.articles.recent(limit) 594 + def recent_documents(limit = 10, options = {}, pagination = true)
  595 + self.articles.recent(limit, options, pagination)
596 end 596 end
597 597
598 has_many :events, :through => :profiles, :source => :articles, :class_name => 'Event' 598 has_many :events, :through => :profiles, :source => :articles, :class_name => 'Event'
app/models/person.rb
@@ -248,7 +248,7 @@ class Person < Profile @@ -248,7 +248,7 @@ class Person < Profile
248 248
249 def is_admin?(environment = nil) 249 def is_admin?(environment = nil)
250 environment ||= self.environment 250 environment ||= self.environment
251 - role_assignments.select { |ra| ra.resource == environment }.map{|ra|ra.role.permissions}.any? do |ps| 251 + role_assignments.includes([:role, :resource]).select { |ra| ra.resource == environment }.map{|ra|ra.role.permissions}.any? do |ps|
252 ps.any? do |p| 252 ps.any? do |p|
253 ActiveRecord::Base::PERMISSIONS['Environment'].keys.include?(p) 253 ActiveRecord::Base::PERMISSIONS['Environment'].keys.include?(p)
254 end 254 end
app/models/profile.rb
@@ -398,8 +398,8 @@ class Profile < ActiveRecord::Base @@ -398,8 +398,8 @@ class Profile < ActiveRecord::Base
398 # 398 #
399 # +limit+ is the maximum number of documents to be returned. It defaults to 399 # +limit+ is the maximum number of documents to be returned. It defaults to
400 # 10. 400 # 10.
401 - def recent_documents(limit = 10, options = {})  
402 - self.articles.recent(limit, options) 401 + def recent_documents(limit = 10, options = {}, pagination = true)
  402 + self.articles.recent(limit, options, pagination)
403 end 403 end
404 404
405 def last_articles(limit = 10, options = {}) 405 def last_articles(limit = 10, options = {})
app/models/profile_list_block.rb
@@ -14,12 +14,13 @@ class ProfileListBlock < Block @@ -14,12 +14,13 @@ class ProfileListBlock < Block
14 14
15 def profile_list 15 def profile_list
16 result = nil 16 result = nil
  17 + visible_profiles = profiles.visible.includes([:image,:domains,:preferred_domain,:environment])
17 if !prioritize_profiles_with_image 18 if !prioritize_profiles_with_image
18 - result = profiles.visible.all(:limit => limit, :order => 'updated_at DESC').sort_by{ rand }  
19 - elsif profiles.visible.with_image.count >= limit  
20 - result = profiles.visible.with_image.all(:limit => limit * 5, :order => 'updated_at DESC').sort_by{ rand } 19 + result = visible_profiles.all(:limit => limit, :order => 'updated_at DESC').sort_by{ rand }
  20 + elsif visible_profiles.with_image.count >= limit
  21 + result = visible_profiles.with_image.all(:limit => limit * 5, :order => 'updated_at DESC').sort_by{ rand }
21 else 22 else
22 - result = profiles.visible.with_image.sort_by{ rand } + profiles.visible.without_image.all(:limit => limit * 5, :order => 'updated_at DESC').sort_by{ rand } 23 + result = visible_profiles.with_image.sort_by{ rand } + visible_profiles.without_image.all(:limit => limit * 5, :order => 'updated_at DESC').sort_by{ rand }
23 end 24 end
24 result.slice(0..limit-1) 25 result.slice(0..limit-1)
25 end 26 end
app/models/recent_documents_block.rb
@@ -16,11 +16,9 @@ class RecentDocumentsBlock < Block @@ -16,11 +16,9 @@ class RecentDocumentsBlock < Block
16 16
17 include ActionController::UrlWriter 17 include ActionController::UrlWriter
18 def content(args={}) 18 def content(args={})
19 - docs = self.limit.nil? ? owner.recent_documents : owner.recent_documents(self.limit)  
20 - 19 + docs = self.limit.nil? ? owner.recent_documents(nil, {}, false) : owner.recent_documents(self.limit, {}, false)
21 block_title(title) + 20 block_title(title) +
22 content_tag('ul', docs.map {|item| content_tag('li', link_to(h(item.title), item.url))}.join("\n")) 21 content_tag('ul', docs.map {|item| content_tag('li', link_to(h(item.title), item.url))}.join("\n"))
23 -  
24 end 22 end
25 23
26 def footer 24 def footer
app/views/profile/_person_profile.rhtml
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 <tr> 37 <tr>
38 <th colspan='2'><%= __('Enterprises') %></th> 38 <th colspan='2'><%= __('Enterprises') %></th>
39 </tr> 39 </tr>
40 - <% profile.enterprises.each do |item| %> 40 + <% profile.enterprises.includes(:environment,:domains, :preferred_domain).each do |item| %>
41 <tr> 41 <tr>
42 <td></td> 42 <td></td>
43 <td><%= button 'menu-enterprise', item.name, item.url %></td> 43 <td><%= button 'menu-enterprise', item.name, item.url %></td>
config/routes.rb
@@ -23,13 +23,13 @@ ActionController::Routing::Routes.draw do |map| @@ -23,13 +23,13 @@ ActionController::Routing::Routes.draw do |map|
23 map.connect '', :controller => "home", :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } } 23 map.connect '', :controller => "home", :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } }
24 map.home 'site/:action', :controller => 'home' 24 map.home 'site/:action', :controller => 'home'
25 25
26 - map.connect 'images/*stuff', :controller => 'not_found', :action => 'index'  
27 - map.connect 'stylesheets/*stuff', :controller => 'not_found', :action => 'index'  
28 - map.connect 'designs/*stuff', :controller => 'not_found', :action => 'index'  
29 - map.connect 'articles/*stuff', :controller => 'not_found', :action => 'index'  
30 - map.connect 'javascripts/*stuff', :controller => 'not_found', :action => 'index'  
31 - map.connect 'thumbnails/*stuff', :controller => 'not_found', :action => 'index'  
32 - map.connect 'user_themes/*stuff', :controller => 'not_found', :action => 'index' 26 + map.connect 'images/*stuff', :controller => 'not_found', :action => 'nothing'
  27 + map.connect 'stylesheets/*stuff', :controller => 'not_found', :action => 'nothing'
  28 + map.connect 'designs/*stuff', :controller => 'not_found', :action => 'nothing'
  29 + map.connect 'articles/*stuff', :controller => 'not_found', :action => 'nothing'
  30 + map.connect 'javascripts/*stuff', :controller => 'not_found', :action => 'nothing'
  31 + map.connect 'thumbnails/*stuff', :controller => 'not_found', :action => 'nothing'
  32 + map.connect 'user_themes/*stuff', :controller => 'not_found', :action => 'nothing'
33 33
34 # online documentation 34 # online documentation
35 map.doc 'doc', :controller => 'doc', :action => 'index' 35 map.doc 'doc', :controller => 'doc', :action => 'index'
lib/acts_as_having_boxes.rb
@@ -18,7 +18,7 @@ module ActsAsHavingBoxes @@ -18,7 +18,7 @@ module ActsAsHavingBoxes
18 @blocks = nil 18 @blocks = nil
19 end 19 end
20 if @blocks.nil? 20 if @blocks.nil?
21 - @blocks = boxes.inject([]) do |acc,obj| 21 + @blocks = boxes.includes(:blocks).inject([]) do |acc,obj|
22 acc.concat(obj.blocks) 22 acc.concat(obj.blocks)
23 end 23 end
24 @blocks.send(:extend, BlockArray) 24 @blocks.send(:extend, BlockArray)
test/functional/profile_design_controller_test.rb
@@ -322,11 +322,14 @@ class ProfileDesignControllerTest &lt; ActionController::TestCase @@ -322,11 +322,14 @@ class ProfileDesignControllerTest &lt; ActionController::TestCase
322 should 'be able to save FeedReaderBlock configurations' do 322 should 'be able to save FeedReaderBlock configurations' do
323 @box1.blocks << FeedReaderBlock.new(:address => 'feed address') 323 @box1.blocks << FeedReaderBlock.new(:address => 'feed address')
324 holder.blocks(true) 324 holder.blocks(true)
  325 + block = @box1.blocks.last
325 326
326 - post :save, :profile => 'designtestuser', :id => @box1.blocks[-1].id, :block => {:address => 'new feed address', :limit => '20'} 327 + post :save, :profile => 'designtestuser', :id => block.id, :block => {:address => 'new feed address', :limit => '20'}
327 328
328 - assert_equal 'new feed address', @box1.blocks[-1].address  
329 - assert_equal 20, @box1.blocks[-1].limit 329 + block.reload
  330 +
  331 + assert_equal 'new feed address', block.address
  332 + assert_equal 20, block.limit
330 end 333 end
331 334
332 should 'require login' do 335 should 'require login' do
test/integration/routing_test.rb
@@ -228,4 +228,32 @@ class RoutingTest &lt; ActionController::IntegrationTest @@ -228,4 +228,32 @@ class RoutingTest &lt; ActionController::IntegrationTest
228 assert_routing('/admin/plugin/foo/admin_bar/play/1', {:controller => 'foo_plugin_admin_bar', :action => 'play', :id => '1'}) 228 assert_routing('/admin/plugin/foo/admin_bar/play/1', {:controller => 'foo_plugin_admin_bar', :action => 'play', :id => '1'})
229 end 229 end
230 230
  231 + def test_not_found_images_on_nothing
  232 + assert_recognizes({:controller => 'not_found', :action => 'nothing', :stuff => ['aksdhf']}, '/images/aksdhf')
  233 + end
  234 +
  235 + def test_not_found_stylesheets_on_nothing
  236 + assert_recognizes({:controller => 'not_found', :action => 'nothing', :stuff => ['aksdhf']}, '/stylesheets/aksdhf')
  237 + end
  238 +
  239 + def test_not_found_designs_on_nothing
  240 + assert_recognizes({:controller => 'not_found', :action => 'nothing', :stuff => ['aksdhf']}, '/designs/aksdhf')
  241 + end
  242 +
  243 + def test_not_found_articles_on_nothing
  244 + assert_recognizes({:controller => 'not_found', :action => 'nothing', :stuff => ['aksdhf']}, '/articles/aksdhf')
  245 + end
  246 +
  247 + def test_not_found_javascripts_on_nothing
  248 + assert_recognizes({:controller => 'not_found', :action => 'nothing', :stuff => ['aksdhf']}, '/javascripts/aksdhf')
  249 + end
  250 +
  251 + def test_not_found_thumbnails_on_nothing
  252 + assert_recognizes({:controller => 'not_found', :action => 'nothing', :stuff => ['aksdhf']}, '/thumbnails/aksdhf')
  253 + end
  254 +
  255 + def test_not_found_user_themes_on_nothing
  256 + assert_recognizes({:controller => 'not_found', :action => 'nothing', :stuff => ['aksdhf']}, '/user_themes/aksdhf')
  257 + end
  258 +
231 end 259 end
test/unit/boxes_helper_test.rb
@@ -46,7 +46,8 @@ class BoxesHelperTest &lt; ActiveSupport::TestCase @@ -46,7 +46,8 @@ class BoxesHelperTest &lt; ActiveSupport::TestCase
46 b = p.blocks.select{|bk| !bk.kind_of?(MainBlock) }[0] 46 b = p.blocks.select{|bk| !bk.kind_of?(MainBlock) }[0]
47 b.display = 'never'; b.save! 47 b.display = 'never'; b.save!
48 box = b.box 48 box = b.box
49 - box.expects(:blocks).returns([b]) 49 + box.blocks = [b]
  50 + box.save!
50 expects(:display_block).with(b, '') 51 expects(:display_block).with(b, '')
51 expects(:request).returns(request) 52 expects(:request).returns(request)
52 stubs(:block_target).returns('') 53 stubs(:block_target).returns('')
@@ -64,7 +65,8 @@ class BoxesHelperTest &lt; ActiveSupport::TestCase @@ -64,7 +65,8 @@ class BoxesHelperTest &lt; ActiveSupport::TestCase
64 b = p.blocks.select{|bk| !bk.kind_of?(MainBlock) }[0] 65 b = p.blocks.select{|bk| !bk.kind_of?(MainBlock) }[0]
65 b.display = 'never'; b.save! 66 b.display = 'never'; b.save!
66 box = b.box 67 box = b.box
67 - box.expects(:blocks).returns([b]) 68 + box.blocks = [b]
  69 + box.save!
68 expects(:display_block).with(b, '').never 70 expects(:display_block).with(b, '').never
69 expects(:request).returns(request) 71 expects(:request).returns(request)
70 stubs(:block_target).returns('') 72 stubs(:block_target).returns('')
@@ -106,9 +108,7 @@ class BoxesHelperTest &lt; ActiveSupport::TestCase @@ -106,9 +108,7 @@ class BoxesHelperTest &lt; ActiveSupport::TestCase
106 108
107 should 'fill context with the article, request_path and locale' do 109 should 'fill context with the article, request_path and locale' do
108 request = mock() 110 request = mock()
109 - box = mock()  
110 -  
111 - box.expects(:blocks).returns([]) 111 + box = Box.create!(:owner => fast_create(Profile))
112 request.expects(:path).returns('/') 112 request.expects(:path).returns('/')
113 expects(:request).returns(request) 113 expects(:request).returns(request)
114 expects(:locale).returns('en') 114 expects(:locale).returns('en')
test/unit/enterprise_test.rb
@@ -482,9 +482,11 @@ class EnterpriseTest &lt; ActiveSupport::TestCase @@ -482,9 +482,11 @@ class EnterpriseTest &lt; ActiveSupport::TestCase
482 482
483 should 'reindex products with full category name after save' do 483 should 'reindex products with full category name after save' do
484 product = mock 484 product = mock
  485 + products = mock
485 product.expects(:category_full_name) 486 product.expects(:category_full_name)
486 - Enterprise.any_instance.stubs(:products).returns([product])  
487 - Enterprise.expects(:solr_batch_add).with(includes(product)) 487 + products.stubs(:includes).returns([product])
  488 + Enterprise.any_instance.stubs(:products).returns(products)
  489 + Enterprise.expects(:solr_batch_add).with([products])
488 ent = fast_create(Enterprise) 490 ent = fast_create(Enterprise)
489 ent.save! 491 ent.save!
490 end 492 end
vendor/plugins/access_control/lib/acts_as_accessor.rb
@@ -4,7 +4,7 @@ class ActiveRecord::Base @@ -4,7 +4,7 @@ class ActiveRecord::Base
4 4
5 def has_permission?(permission, resource = nil) 5 def has_permission?(permission, resource = nil)
6 return true if resource == self 6 return true if resource == self
7 - role_assignments.any? {|ra| ra.has_permission?(permission, resource)} 7 + role_assignments.includes([:resource,:role]).any? {|ra| ra.has_permission?(permission, resource)}
8 end 8 end
9 9
10 def define_roles(roles, resource) 10 def define_roles(roles, resource)