← All posts tagged Rails

Мигрировал с Redmine 1.4 на Redmine 2.2 и у меня перестала работать рассылка (самописная в виде плагина). На все попытки отправить сообщение мне выдается ошибка «could not get 3xx (550)». Уже все пальцы стер пытаясь нагуглить причину.

ЗЫ. Использую smtp от Google Apps

Решил попробовать библиотеку github.com для управления событиями в Календаре от Google.

Запускаю в irb тестовый пример — работает. Делаю тоже самое в консоли Rails и код зависает на Google::Calendar.new. Ни каких ошибок, а просто висит!

Пробовал передавать в Google::Calendar.new не все параметры — нормально обрабатываются ошибки. На валидных данных — зависает. Куда копать?

В модели есть валидация, которая мне уж очень мешает. Удалить ее напрямую не могу, так как пишу плагин-патч. Как вообще можно удалить валидацию из модели?

Разместил резюме год назад на superjob и до сих пор приходят предложения поработать. На этот раз AT Comsalting ищет человека на проект Электронный загс. Есть желающие попробоваться?

Уже полчаса не могу составить запрос выборки по дате (выбрать все записи от даты А до даты Б).

"date > :from AND date < :to" выдает какую-то невнятную ошибку PostrgreSQL (PG::Error: ERROR: missing FROM-clause entry for table "due_date >= :from AND due_date <= :to)")

Получается, название таблицы обязательно надо указывать?

Плагин will_paginate не умеет делать ссылки для ajax, даже когда request.xhr? #-> true

У нас возникла дилема: либо отказаться от will_paginate и искать новый, либо патчить will_paginate. Решили идти по второму пути.

Файл config/initializers/will_paginate_patch.rb

WillPaginate::ActionView::LinkRenderer.class_eval do
def link(text, target, attributes)
super(text, target, attributes.merge("data-remote" => @template.request.xhr?))
end
end

Возникла проблема при использовании CarrierWave (организация файлового хранилища): все файлы с русскоязычными именами приобретали вид "_______________1_.jpg". Долго искал по интернетам, но ответ нашел в официальной документации CarrierWave. Надо было всего лишь прописать строчку (я ее прописал прямо перед описанием своего uploader'а):

CarrierWave::SanitizedFile.sanitize_regexp = [^[:word:]\.\-\+]

Есть четыре таблицы, которые связаны как has_many: 1->2->3->4. Параметр through позволяет добавить только сквозные связи 1->3 и 2->4. А как сделать сквозную связь 1->4? Кто как решает эту проблему?

Hook'и в Spree 1.0 признаны устаревшими (depricated), но пока еще поддерживаются. Рекомендуется использовать явный вызов Deface::Override. Оно и к лучшему... у Deface возможностей гораздо больше.

По вопросу #1778078 буду сам себе отвечать. Hook'и по прежнему работают. Список hook'ов можно посмотреть, если вызвать Spree::ThemeSupport::HookListener.migratable_hooks

Посмотрел внутрь, а там все тот же старый-добрый Deface. Можете сами посмотреть: github.com

Проблема описанная в #1769963 решается тем, что роуты надо задавать по особому. В конец файла routes.rb нужно добавить следующий код:

Spree::Core::Engine.routes.append do
# маршрут, который ходите добавить
end

После этого все таинственным образом начинает работать.

У кого есть опыт работы с Spree? Как там правильно роуты добавлять? А то роуты добавляю, а методы вроде _url и _path отсутствуют (хотя сервер на адреса по роутам нормально отвечает). Куда копать?

Чтобы решить проблему, описанную в #1706435, надо отключить транзакцию для миграции. Делается это добавлением (на самом деле переопределением) приватного метода ddl_transaction. В моем случае он стал выглядеть так:
def ddl_transaction(&block)
block.call
end

День 22. Писал миграцию для того, чтобы пересоздать привязки (источники информации вынесли в отдельную таблицу, которая позволяет связывать любые объекты/атрибуты). Этих привязок надо было создать тысяч 40. Оказывается, что rake db:migrate упаковывает все 40к запросов в одну транзакцию. Ждал час, а потом забил и пошел домой. Завтра узнаю как миграция применилась =)

День 21. Рефакторинг. Мы сделали фильтр, который применяется сразу же после выбора значения. Клиенту понадобилось использовать фильтр совместно с запросом по ключевым словам. Немного доработал скоупы, теперь проверка существования параметра убрана внутрь скоупа. Это позволяет вызвать сразу цепочку скоупов в контролере без всяких прерывающих проверок. Также пришлось удалять множество javascript-кода (который отвечал за переход). Жутко нудное задание!!!