У меня есть проект Rails 3. С Rails 3 появилась Arel и возможность повторно использовать одну область для создания другой. Мне интересно, есть ли способ использовать области при определении отношений (например, "has_many").
У меня есть записи, в которых есть столбцы разрешений. Я хотел бы создать область default_scope, которая учитывает мои столбцы разрешений, чтобы отфильтровывать записи (даже те, к которым осуществляется доступ через отношения).
В настоящее время в Rails 3 default_scope (включая найденные мной исправления) не обеспечивают работоспособного способа передачи proc (который мне нужен для поздней привязки переменных). Можно ли определить has_many, в который можно передать именованную область?
Идея повторного использования именованной области видимости будет выглядеть так:
Orders.scope :my_orders, lambda{where(:user_id => User.current_user.id)}
has_many :orders, :scope => Orders.my_orders
Или неявное кодирование этой именованной области во взаимосвязи будет выглядеть так:
has_many :orders, :scope => lambda{where(:user_id => User.current_user.id)}
Я просто пытаюсь применить default_scope с поздним связыванием. Я бы предпочел использовать подход Arel (если он есть), но использовал бы любой работоспособный вариант.
Поскольку я имею в виду текущего пользователя, я не могу полагаться на условия, которые не были оценены в последний возможный момент, например:
has_many :orders, :conditions => ["user_id = ?", User.current_user.id]