no I have not. No any authentication system (as cancan for example) authentication based on a namespaces. In each namespace there is BaseController that has :authenticate_dept_head! (it is an example for dept_head namespace)
2010/9/17 Sergio Cambra .:: entreCables S.L. ::. <[email protected]>: > On Viernes, 17 de Septiembre de 2010 11:22:23 Andrey Voronkov escribió: >> can a conditions_for_collection makes department to load each time? >> but it has no sense. > > conditions_for_collection is only called to bulid the list query, it isn't > called for each row. > > I can see query is issued in list_actions partial, so probably some security > method checks current_user.department. Have you defined some action_authorized > method in your controller, or authorized_for_action method in your model? > >> >> Here is listing from the top of action processing if it helps. As an >> autientication system I use devise. And dept_head user belongs to >> department. But I think it should'n be checked on each row. >> >> Processing DeptHead::TeachingPlacesController#index (for 127.0.0.1 at >> 2010-09-17 19:09:40) [GET] >> DeptHead Load (3.5ms) SELECT * FROM "users" WHERE ("users"."id" = >> 4) AND ( ("users"."type" = 'DeptHead' ) ) LIMIT 1 >> Department Load (43.8ms) SELECT * FROM "departments" WHERE >> ("departments"."id" = 1) >> SQL (99.3ms) SELECT count(DISTINCT "teaching_places".id) AS >> count_all FROM "teaching_places" LEFT OUTER JOIN "lecturers" ON >> "lecturers".id = "teaching_places".lecturer_id LEFT OUTER JOIN >> "positions" ON "positions".id = "teaching_places".position_id WHERE >> (("teaching_places"."department_id" = 1)) >> TeachingPlace Load (4.7ms) SELECT "teaching_places".* FROM >> "teaching_places" WHERE (("teaching_places"."department_id" = 1)) >> ORDER BY "teaching_places"."id" ASC LIMIT 30 OFFSET 0 >> Lecturer Load (3.7ms) SELECT * FROM "lecturers" WHERE >> ("lecturers"."id" IN >> (11,6,7,12,8,13,9,14,15,16,17,1,2,18,19,3,10,4,5)) >> Position Load (1.7ms) SELECT * FROM "positions" WHERE >> ("positions"."id" IN (1,2,3)) >> Rendering template within layouts/application >> Rendering list >> Rendered _list_header (26.4ms) >> Rendered _list_column_headings (35.9ms) >> Rendered _messages (2.4ms) >> Rendered _list_messages (186.4ms) >> Rendered _list_record_columns (12.6ms) >> CACHE (0.0ms) SELECT * FROM "departments" WHERE ("departments"."id" = >> 1) Rendered _list_actions (75.7ms) >> Rendered _list_record (121.6ms) >> Rendered _list_record_columns (4.4ms) >> CACHE (0.0ms) SELECT * FROM "departments" WHERE ("departments"."id" = >> 1) >> >> ... >> >> 2010/9/17 Sergio Cambra .:: entreCables S.L. ::. <[email protected]>: >> > On Viernes, 17 de Septiembre de 2010 01:29:30 Andrey Voronkov escribió: >> >> This is an example of N+1 error in my case: >> >> >> >> ... >> >> >> >> CACHE (0.0ms) SELECT * FROM "departments" WHERE ("departments"."id" = >> >> 1) Rendered _list_actions (26.8ms) >> >> Rendered _list_record (34.9ms) >> >> Rendered _list_record_columns (4.4ms) >> >> CACHE (0.0ms) SELECT * FROM "departments" WHERE ("departments"."id" >> >> = 1) Rendered _list_actions (26.9ms) >> >> Rendered _list_record (33.4ms) >> >> Rendered _list_record_columns (4.3ms) >> >> CACHE (0.0ms) SELECT * FROM "departments" WHERE ("departments"."id" >> >> = 1) >> > >> > If you are excluding department column, why is department loaded? Is it >> > used in some override? In a security check? Anyway you can override >> > active_scaffold_includes: >> > def active_scaffold_includes >> > �...@active_scaffold_includes ||= [:department] >> > end >> > >> >> ... >> >> >> >> 2010/9/17 Andrey Voronkov <[email protected]>: >> >> > I have model TeachingPlace that belongs to Department and to the >> >> > Lecturer models and has table field called position. >> >> > I want to rid off N+1 SQL requests. There is no N+1 if >> >> > config.columns = [:lecturer, :department, :position] >> >> > >> >> > Person who works with this interface is a department agent so I have >> >> > this two methods: >> >> > >> >> > protected >> >> > >> >> > def before_create_save(record) >> >> > if dept = current_dept_head.department >> >> > record.department_id = dept.id >> >> > end >> >> > end >> >> > >> >> > def conditions_for_collection >> >> > if @dept ||= current_dept_head.department >> >> > {:department_id => @dept.id} >> >> > else >> >> > {:department_id => nil} >> >> > end >> >> > end >> >> > >> >> > As you can guess I do not need to display department field in list or >> >> > anywhere in this interface because the user knows what department he >> >> > represents. But this: >> >> > config.list.columns.exclude :department >> >> > causes N+1 error. Is there any kind of descision of my trouble? >> > >> > -- >> > Sergio Cambra .:: entreCables S.L. ::. >> > Mariana Pineda 23, 50.018 Zaragoza >> > T) 902 021 404 F) 976 52 98 07 E) [email protected] >> > >> > -- >> > You received this message because you are subscribed to the Google Groups >> > "ActiveScaffold : Ruby on Rails plugin" group. To post to this group, >> > send email to [email protected]. To unsubscribe from this >> > group, send email to [email protected]. For >> > more options, visit this group at >> > http://groups.google.com/group/activescaffold?hl=en. > > -- > Sergio Cambra .:: entreCables S.L. ::. > Mariana Pineda 23, 50.018 Zaragoza > T) 902 021 404 F) 976 52 98 07 E) [email protected] > > -- > You received this message because you are subscribed to the Google Groups > "ActiveScaffold : Ruby on Rails plugin" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/activescaffold?hl=en. > > -- You received this message because you are subscribed to the Google Groups "ActiveScaffold : Ruby on Rails plugin" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/activescaffold?hl=en.
