Это называется Rails scope. Он по существу создает метод класса, называемый .readable_by(user)
, который выполняет соединение SQL в таблице разрешений и возвращает записи, где значение столбца action
является «представлением», а значение столбца user_id
равно user.id
.
Он может быть использован как так (при условии, что это определено в Comments
модели):
readable_comments = Comments.readable_by(current_user)
простой сфера, которая ничего не делает это:
scope :my_scope_name, lambda {}
Область применения, который принимает параметр является это:
scope :my_scope_name, lambda { |my_parameter| }
И в приведенной выше области применения используется приблизительно ActiveRecord finder methods, в частности joins
и where
.
Хороший ответ. Для полноты, пожалуйста, также объясните «лямбда» здесь. – Anil
Хорошая идея. «Лямбда» - анонимная функция. Кроме того, я буду откладывать документы (объясняется в объекте Proc): http://www.ruby-doc.org/core-1.9.3/Proc.html – nbsp