У меня есть проект 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]