0

Я довольно новичок в ROR, поэтому я застрял в данный момент с этой проблемой.Ruby on Rails: ассоциации

Я создаю приложение со статьями и шаблонами. Я хочу создать шаблоны со многими статьями, и те же статьи могут быть назначены нескольким различным шаблонам. Итак, когда вы создаете шаблоны, я хочу назначать ему статьи. Вы будете думать напрямую, используя ассоциацию has_many, но я не думаю, что это улавливает мою проблему.

Я хочу назначить статьи нескольким шаблонам, поэтому я подумал, что использование какой-либо таблицы ссылок будет здесь.

Но я не знаю, как это сделать в рельсах! Или какое решение я должен искать.

Есть ли кто-нибудь, кто мог бы посоветовать мне эту проблему?

ответ

1

Попробуйте проверить материал на has_and_belongs_to_many

По существу, откройте консоль и введите

$ рельсов г модель название статьи: струнное тело: текст

$ рельсов g имя шаблона модели: строка some_other_attributes: тип и т. д. и т.д.

$ рельсов г миграция create_articles_templates

Затем отредактируйте create_articles_templates с:

class CreateArticlesTemplates < ActiveRecord::Migration 
    def up 
    create_table :articles_templates, :id => false do |t| 
     t.integer :template_id, :article_id 
    end 
    end 

    def down 
    end 
end 
2

Вы можете создать ссылки модельной articles_template

rails generate model articles_template 

со ссылками на статьи и шаблон

class CreateArticlesTemplates < ActiveRecord::Migration 
    def change 
    create_table :articles_templates do |t| 
     t.references :article 
     t.references :template 
     t.timestamps 
    end 
    end 
end 

, а затем установить ассоциацию в модели articles_template

class ArticlesTemplate < ActiveRecord::Base 
    belongs_to :article 
    belongs_to :template 
end 

class Article < ActiveRecord::Base 
    has_many :articles_templates 
    has_many :templates, :through => :articles_templates 
end 

class Template < ActiveRecord::Base 
    has_many :articles_templates 
    has_many :articles, :through => articles_templates 
end 

ИМХО это лучшая практика, потому что вы можете добавить некоторые дополнительные функциональные возможности прямо в модели связующей и таблицы. (подробнее об этом here)

+0

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

Смежные вопросы