On Viernes, 17 de Septiembre de 2010 11:36:16 Andrey Voronkov escribió: > 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)
What action links are displayed for each row? > > 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. -- 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.
