Пара граблей в Ruby [on Rails] (absolute noob's guide)

    Языки и технологии я изучаю методом умножения шишек на лбу. Набредете на такие вот грабли — хоть немного места на лбу сбережете.

    ruby-debug-ide и mkmf


    Убунтоиды могут столкнуться с такой бедой: при установке gem ruby-debug-ide установщик жалуется на отсутствие какого-то mkmf и отказывается продолжать. И sudo здесь ни при чем. Не ищите соответсвующий gem, загляните лучше в системный менеджер пакетов (aptitude, Synaptic или Adept или сильномогучие apt-get и dpkg :) ). Кроме вполне логичного для программистов build-essential должен быть установлен еще и ruby[X]-dev (где [X] — предпочитаемая вами версия Ruby, скорее всего у вас 1.8, т.е. пакет ruby1.8-dev). После его установки повторите команду на установку ruby-debug-ide, всё пойдет как по маслу.

    Совет в принципе применяется ко всем библиотекам с native extension в сердце.

    Поклонникам jruby придется избегать пакетов с native extensions — ищите версии пакетов, поемеченные -jruby.

    habtm: id в таблице ассоциаций


    habtm — это сокращенно has_and_belongs_to_many (будут проблемы — ищите на форумах и так, и этак). Ему нужна таблица ассоциаций, состоящая только из id двух связываемых объектов. И если от timestamps легко избавиться, то колонка id в качестве первичного ключа создается без нашего ведома и может попортить немало кровушки таким нубам как я. Чтобы избавиться от нее, не нужно делать одну лишнюю миграцию. Код создания таблицы ассоциации може выглядеть следующим образом:

    class CreateOnesTwos < ActiveRecord::Migration
      def self.up
        create_table :ones_twos, :id => false do |t| # вон он, дополнительный параметр :id
          t.references :one
          t.references :two
        end
      end
    
      def self.down
        drop_table :ones_twos
      end
    end
    
    Поделиться публикацией

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

      0
      Habtm вообще использовать не рекомендуется. Используйте has_many :friends, :through=>:friendships, например. Тогда и с дополнительными полями не буде.
        0
        Там лишняя модель нужна, она не всегда в тему. Но вообще да, habtm вроде как устаревает.
          0
          Лишняя модель никому не мешает, эстетика в данном случае тоже ни к чему. А вот то, что ассоциации m2m в 90% случаев подразумевают дополнительные параметры связей, которые никак не задать с помощью habtm

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое