Как стать автором
Обновить

Комментарии 41

Надеюсь на этом Вы не остановитесь? (-:
Спасибо!
Думаю, что если будет интерес, то обязательно напишу еще.
Будет, пожалуйста. ;-)
Интерес есть, пишите.
Есть! Про канкан я например слышал даже на хабре раза два, стоит про него написать (наверное). Ну или authlogic.
Ещё про will_paginate слышал, что тоже популярный.
authlogic и will_paginate уступили место в мейнстриме devise и kaminari
Полтора года на рельсах, а об этих гемах и не знал О_о Спасибо, полезно!
Когда начал заниматься рельсами, вопрос внешних ключей выплыл одним из первых. Много гуглил foreigner выплыл практически сразу. Но после прочтения львиной доли выборки гугла согласился, что это не совсем реилсвей и этого функционала не зря нет в мейнстриме.
В общем как всегда, есть линия партия, а есть джемы которые эту линию партии корректирует, чем пользоваться решать стоит толкаясь от задачи.
Я тоже читал об этом, что мол нет смысла дублировать поведение AR на уровне базы данных, что это совсем не DRY, и т.п. Но мне спокойнее сразу сделать добавить нужные ключи, тем более что вопрос-то одной строкой решается.
Спасибо, о многих гемах не знал.
Есть такой сайт Ruby Toolbox Там есть много интересного про гемы и проекты — особенно радует возможность посмотреть тенденции «популярности» того или иного гема. Все это категоризировано.
А вот мой джентельменский набор:
authlogic — авторизация пользователей
paperclip — загрузка и обработка картинок
enum_column3 — поддержка enum для MySQL
will_paginate — постраничный пэйджинг для отображения данных
delayed_job — фоновая обработка любых заданий

кстати почему authlogic, а не devise например?
devise крутая штука, использовал в парочке проектов, но как мне показалось — слишком замороченая, authlogic по проще и в настройке не займет много времени.
А мне наоборот devise показался проще, перешел с authlogic на него в последнем проекте, всё устраивает.
понял, спасибо, тоже попробую раз попроще
и paperclip, а не carrierwave?
так исторически сложилось :)
хотя вот в последнем мне пришлось использовать carrierwave — все отлично! :)
более того. will_paginate, а не kaminari? delayed_job, а не resque? а аутентификацию через логин пароль уже даже omniauth со специальным провайдером умеют.

Имхо, описывать гемы для рельсов — всегда чревато. в отличие от django, тут есть выбор. и он всегда вызывает холиворы.
Не холивары, а обсуждения.
Согласен, поэтому я планировал не затрагивать потенциально холиварные гемы, а писать только о специфических гемах, аналогов которых либо нет, либо они не очень поддерживаются в данный момент.
Из специфичных гемов могу посоветовать осветить:
  • * draper — позволяет отделить модель предметной области от её представления, в качестве приятного бонуса получаем очень чистые представления
  • * cells — незаменимая штука для борьбы с жирными контроллерами (которые помимо основных данных, выбирают ещё кучу сопутствующих из различных моделей)
  • * trucker — очень полезная штука для переноса данных из унаследованной базы данных
  • * metric_fu — помогает отслеживать динамику качества кода вашего проекта с помощью кучи других гемов, считающих разнообразные метрики
Разрешите полюбопытствовать в целях повышения кругозора
class AddDeletedToTasks << ActiveRecord::Migration
  def change

Почему тут не def up?
Потому, что в rails 3.1 и выше принять использовать change вместо up/down.
не совсем так. Можно использовать change если вы меняете структуру базы. Если вы делаете кроме этого апдейты моделей — то всё таки желательнее использовать up/down.
для почты — mailcatcher
для конфигурации я делал свое вроде удобное творенье — взгляните github.com/homakov/configit
+1 mailcatcher гораздо удобнее безинтерфейсного letter_opener-а
в песочнице есть статья про carrierwave & paperclip
Я предлагаю использовать вместо foreigner более функциональный аналог — schema_plus.
В Rails есть стандартный метод belongs_to, его можно использовать в миграциях тоже, соответственно от гема foreigner никакого толку я не вижу. Пример использования belongs_to в миграциях:
change_table :company_profiles do |t|
    t.belongs_to :user
end
А где про это можно почитать, что-то в доках не нашел ничего.
Эм, ну так это алиас метода references, ключей он не создает в схеме.
Верно, это алиас к references
Как не создает? Проверьте. Запись t.belongs_to :user создаст в таблице company_profiles foreign_key user_id типа integer. Все создается
Окей, смотрите. Вот такая миграция.

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.text :content

      t.belongs_to :post

      t.timestamps
    end
  end
end

Смотрим через любой менеджер (у меня это Sequel Pro):
image
Вы видите внешние ключи? А то, что создала миграция — это просто поле, в которой хранится айдишник поста.

Вобщем, прочтите сперва хотя бы это.
Для полиморфной связи можно заюзать:
t.belongs_to :user, :polymorphic => true

В rails 3 если этот код написать в self.change, то миграцию на down не нужно будет писать вовсе, так что, я бы сказал, в foreigner не преимущества, а только недостатки.
Вместо immortal лучше использовать acts_as_archive или acts_as_soft_deletable, который перемещает запись в другую таблицу вместо того, чтобы помечать её удаленной, ибо если запись оставить и только пометить как удаленную, то потом могут из ниоткуда вылезти очень странные артефакты. Сталкивались, знаем.

И, кстати, ещё один камень в огород will_paginate: если вы работаете с MongoDB — то лучше использовать Kaminari, ибо WillPaginate с монгой не работает.

Такие дела.
Хорошая альтернатива letter_opener => mailtrap.io/ он позволяет дебажить стэйджинги да и расшарить результат легче.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации