Array True

Я читаю довольно много блогов и разных статей, обычно авторы описывают как делать правильно и красиво, поэтому я люблю
рассказывать
как делать не правильно, но быстро и эффективно. Писать про костыли и хаки - совершенно безконкурентное занятие.
Когда мне говорят, что это испортит кодовую базу, я отвечаю, что всегда
нужно рассматривать еще вариант, а вдруг не испортит. Нужно быть оптимистом . Ну и потроллить маленько всегда
приятно, это расширяет сознание.
Так вот, в рейлс many-to-many в принципе принято делать через доп-таблицу. Но если вы отважный хакер, без стыда и совести, то можно сделать так:
create_table "products" do |t|
t.integer "owner_ids", default: [], array: true
end
В модели:
def owners
@owners ||= User.where(id: owner_ids).to_a
end
Во вьюхе формы:
= bootstrap_form_for(@user) do |f|
= f.select :owner_ids, User.all, {}, {class: "select2", multiple: true}
Честно скажу, я не вижу ничего особо криминального так делать даже в серьезном продакшене (если джойны не нужны и таблицы маленькие). Но у меня уже большая деформация, так как рейлс-фич уже давно не писал, а разобраться могу, если жизнь заставит, практически в любом коде. В вопросах стиля себе уже не доверяю. Но написать такой many-to-many в режиме хакантона имхо проще классического (у нас давно работает в одной утилитке). Прокатит это или нет - 50 на 50.
Tweet