O_O OMG! Thanks a lot for investigation!

2010/9/17 Sergio Cambra .:: entreCables S.L. ::. <[email protected]>:
> On Viernes, 17 de Septiembre de 2010 12:26:20 Andrey Voronkov escribió:
>> class TeachingPlace < ActiveRecord::Base
>>   belongs_to :department
>>   belongs_to :lecturer
>>   belongs_to :position
>>   has_many :charge_cards, :dependent => :destroy
>>
>>   validates_presence_of :department, :lecturer
>>
>>   def name
>>     lecturer.name + ' (' + department.name + ')'
>>   end
>> end
>
> Yeah, it's the name method. Delete link has confirm enabled, confirm strings 
> has
> the option to show a dynamic label, different for each record, so
> render_action_link call link.label(record.to_label), to_label call name and
> name load department.
>
>>
>> no authorized_for_delete method
>>
>> 2010/9/17 Sergio Cambra .:: entreCables S.L. ::. <[email protected]>:
>> > On Viernes, 17 de Septiembre de 2010 12:18:37 Andrey Voronkov escribió:
>> >> config.actions.exclude :delete
>> >>
>> >> this string did the trick! but I do not understand why?
>> >
>> > Don't you have a authorized_for_delete method in TeachingPlace model?
>> >
>> >> 2010/9/17 Sergio Cambra .:: entreCables S.L. ::.
> <[email protected]>:
>> >> > On Viernes, 17 de Septiembre de 2010 11:51:55 Andrey Voronkov escribió:
>> >> >> update, delete, show
>> >> >
>> >> > Try to remove those actions, do queries disappear?
>> >> >
>> >> >> 2010/9/17 Sergio Cambra .:: entreCables S.L. ::.
>> >
>> > <[email protected]>:
>> >> >> > 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.
>> >> >
>> >> > --
>> >> > 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.
>
>

-- 
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.

Reply via email to