2012-06-19 2 views
0

Я сейчас читаю Rails 3 In Action. Есть код, который мне интересно, может ли кто-нибудь объяснить мне. У меня трудно понять его:не понимаю сложный код Ruby

scope :readable_by, lambda { |user| joins(:permissions).where(permissions: { action: "view", user_id: user.id })} 

спасибо, микрофон

ответ

5

Это называется 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.

+0

Хороший ответ. Для полноты, пожалуйста, также объясните «лямбда» здесь. – Anil

+0

Хорошая идея. «Лямбда» - анонимная функция. Кроме того, я буду откладывать документы (объясняется в объекте Proc): http://www.ruby-doc.org/core-1.9.3/Proc.html – nbsp

Смежные вопросы