переход с активной записи на сиквел - PullRequest
1 голос
/ 29 июля 2010

Я использую rails3.rc и activerecord3 (с meta_where) и только начал переключаться на сиквел, потому что он, кажется, намного быстрее и предлагает некоторые действительно замечательные функции: -)

Я уже использую плагин active_model (и некоторые другие). Но вот некоторые вопросы, которые я нашел и для которых я не нашел никакой документации:

  1. Насколько я знаю, я должен использовать User [params [: id]] вместо User.find (params [: id]). Но его значение не возрастает, если записи не существует, и не преобразует значение в целое число (тип PK), поэтому оно является строкой в ​​предложении where. Я не уверен, вызывает ли это какие-либо проблемы с производительностью (все ли серверы БД все еще используют ключи правильно?). Вредит ли это identity_map? Как лучше всего решить обе эти проблемы?

  2. Есть ли простой способ перевернуть использование таких ассоциаций, как User.messages_dataset и User.messages? Так что User.messages ведет себя как в AR (= User.messages_data_set). Я думаю, я бы использовал набор данных # ..._ много, но никогда не нуждался бы в методе массива, потому что я мог бы просто добавить .all?

  3. Я заметил, что одни и те же (сложные) запросы иногда выполняются несколько раз за одно действие. Есть ли что-то вроде AR-кеша запросов? (идентичность-карта, кажется, не работает для этих случаев).

  4. Есть ли #to_sql, который я могу вызвать для получения необработанного SQL, который произведет набор данных?

Спасибо за любые подсказки: -)

1 Ответ

3 голосов
/ 31 июля 2010
  1. Вы можете использовать:

    Пользователь [params [: id] .to_i] || поднять продолжение :: Ошибка

    Или напишите свой собственный метод, который делает что-то подобное. Sequel поддерживает нецелые первичные ключи, поэтому он не будет выполнять преобразование автоматически. Это не должно иметь никакого влияния на карту личности. Обратите внимание, что Sequel не использует карту идентичности, если вы не используете плагин identity_map. Я думаю, что лучший способ - написать свой собственный вспомогательный метод.

  2. Не совсем. Вы можете использовать плагин association_proxies, чтобы не массивные методы отправлялись в набор данных, а не в массив объектов. В общем, вы не должны использовать метод набора данных ассоциации. Если вы часто его используете, это признак того, что у вас должна быть ассоциация для этого конкретного использования.

  3. Кэш запросов существует и никогда не будет. Вы должны написать свои действия, чтобы результаты первого запроса кэшировались и использовались повторно.

  4. Набор данных # sql дает вам SELECT SQL для набора данных.

...