Rails 3 HABTM однострочный - PullRequest
       23

Rails 3 HABTM однострочный

0 голосов
/ 02 августа 2011

Мне нужен однострочник для генерации таблицы соединений has_and_belongs_to_many, иначе я вернусь к Django за его более простыми конструкциями "многие ко многим".

рельсы 3 генерируют модель article_tags [..]

Models

# article.rb
has_many :articles_tags
has_many :tags, :through => :articles_tags

# tag.rb
has_many :articles_tags
has_many :articles, :through => :articles_tags

# article_tag.rb
belongs_to :tag
belongs_to :article

Ответы [ 4 ]

3 голосов
/ 02 августа 2011

Ох, подождите, ха-ха, я думаю, что это может сработать:

rails g model articles_tags article:references tag:references --no-id --no-timestamps

Интересно, есть ли способ подавить создание файла модели (article_tags.rb), чтобы я мог просто использовать стандарт has_and_belongs_to_manyсинтаксис без указания: через параметр ?Я ищу идеальный однострочный: совет всем, кто может улучшить вышеуказанный однострочный, чтобы разрешить только использование синтаксиса has_and_belongs_to_many без модели соединения !Иначе, я возвращаюсь в Django с его встроенным ManyToManyFields.

2 голосов
/ 02 августа 2011

Звучит так, как будто вы ищете стандарт has_and_belongs_to_many:

# article.rb
has_and_belongs_to_many :tags

# tag.rb
has_and_belongs_to_many :articles

Ваша таблица соединения будет называться articles_tags и должна содержать два столбца, article_id и tag_id (нетСтолбец id необходим, поскольку он не является моделью).

Это в Руководство по рельсам для ассоциаций .Я настоятельно рекомендую ознакомиться с Rails Guides.

Это почти слишком просто для генератора.Все, что вам нужно, это два пустых класса модели и таблица соединений, которые будут определены в миграции следующим образом:

def self.up
  create_table :articles_tags, :id => false do |t|
    t.integer :article_id
    t.integer :tag_id
  end
end

def self.down
  drop_table :articles_tags
end
1 голос
/ 04 января 2013

Не знаю, по-прежнему ли это интересно после такого большого количества времени, но я думаю, что вы можете взглянуть на https://github.com/zealot128/ruby-habtm-generator: это генератор Rails, который генерирует правильную миграцию для таблицы HABTM.

0 голосов
/ 22 марта 2012

Использование функции создания создаст два индекса

Проверьте этот ответ https://stackoverflow.com/a/9825571/643500

...