Каков результат этого запроса, написанного на ruby ​​в rails helper? - PullRequest
0 голосов
/ 05 октября 2018

Я новичок в рельсах, и я начал работать над проектом, в котором есть модель с именем «Study», и здесь я не могу узнать результат этого запроса, написанный в помощнике по рельсам.

def available_list_of(entities, exclude: nil)
  case entities
     when :studies then Study.where('id NOT IN (?)', exclude.nil? ? [-1] : exclude.pluck(:study_id) + [-1]).list
  end
end

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Я сам нашел его решение.

Он говорит, что получает все записи из Study модели, где id не равно -1, если 'exclude' равно 'nil', иначе получим'study_id' из модели exclude и добавить -1 с study_id.И, наконец, list функция - это модель, которая добавит имя и идентификатор в список

0 голосов
/ 06 октября 2018

Это довольно плотный код, который может быть расширен до:

def available_list_of(entities, exclude: nil)
  # why use a case statement if there is only one option?
  if entities == :studies
    if exclude.nil?
      Study.where('id NOT IN (?)', '-1')
    else
       Study.where('id NOT IN (?)', (exclude.pluck(:study_id) + [-1]))
    end
  end
end

Какова реальная цель кода, вне моего понимания, хотя, как это можно сделать с помощью области действия:

class Study < ApplicationRecord
  def self.excluding(excluded)
    excluded.nil? ? self : self.where.not(id: excluded)
  end
end

А также, почему ваш типичный столбец id с автоинкрементом может содержать -1?

0 голосов
/ 05 октября 2018

Когда ваше выражение работает, вы можете использовать метод to_sql, проверить документацию здесь этот метод из ActiveRecord :: Relation

Как пример:

Incident.where(reference: "PATAPAM").to_sql
=> "SELECT `incidents`.* FROM `incidents`  WHERE `incidents`.`reference` = 'PATAPAM'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...