jueves, 13 de diciembre de 2007

Tuneando acts_as_list

Tengo un modelo de datos con dos tablas as y bs. Por tanto, tengo los modelos a.rb y b.rb donde

class A < ActiveRecord::Base
 has_many :bs, :dependent => :destroy
end

class B < ActiveRecord::Base
 belongs_to :a
 acts_as_tree :order => 'position'
 acts_as_list :scope => a
end


Es decir, la tabla bs contiene los campos a_id, position y parent_id de forma que los registros de bs relacionados con un mismo registro de as se comporten como una lista.

Ahora bien, he de cambiar esto. Necesito que los registros de bs relacionados con un mismo registro de as y con parent_id = null se comporten como una lista independiente.

 acts_as_list :scope => 'a_id = #{a_id} and parent_id is null'

Finalmente, necesito que los registros de bs con un mismo parent_id y relacionados a un mismo registro de as también se comporten como una lista independiente.

 acts_as_list :scope => 'a_id = #{a_id} and parent_id #{parent.nil? ? \'is null\' : \'= \' + parent_id.to_s }'

Como se dice en la documentación, acerca de :scope
It‘s also possible to give it an entire string that is interpolated if you need a tighter scope than just a foreign key.
...y eso hemos hecho.