1

У меня есть базовый автоматически сгенерированный проект Rails4 с 2 таблиц, которые имеют взаимоотношения HABTM:Rails4: где и как установить отношения HABTM?

class Page < ActiveRecord::Base 
    has_and_belongs_to_many :topics 
end 
class Topic < ActiveRecord::Base 
    has_and_belongs_to_many :pages 
end 

Соответствующая таблица присоединиться также существует (так называемый pages_topics) и, кажется, работает правильно.

Я понял, используя rails console что я могу связать две таблицы с помощью create и << для новых и существующих записей соответственно:

Page.find(1).topics.create(tname: "topic name") ## for new topics 

Page.find(1).topics << Topic.find(3) ## for existing topics 

Однако, я не знаю, как поставить их на работу в мой код.

  • добавить их в мой класс контроллера (ов) в контроллера create и update методов ли?
  • Если да, то как мне это сделать в сочетании с типичным шаблоном защиты параметров params.require(...).permit(...)?

Или есть лучший способ сделать это, что я еще не научился?

ответ

1

Для управления отношениями вам понадобится таблица соединений. Ознакомьтесь с направляющим Rails here для получения дополнительной информации. После того, как все это настроено, вы можете изменить свои формы (если хотите, или вам нужно), и ваш метод create вашего контроллера, чтобы собрать сколько-нибудь родных братьев/родителей/детей, которые вам нужны.

def new 
    @page = Page.new 
    @page.build_topic 
    2.times do # or something like this 
    @page.topic.build 
    end 
end 

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

+0

Извините, я должен был упомянуть, что у меня есть таблица соединений, и она работает правильно. Я обновлю свой первоначальный вопрос. Как только все таблицы настроены, хотя, где обычно помещается код для создания ассоциаций? В методах контроллера или в другом месте? –

+0

Итак, вы хотите знать, как установить эти отношения? –

+0

Я так думаю ... как я упоминал в своем посте, я думаю, что понимаю, как создавать ассоциации с помощью консоли, но я не уверен, где и как помещать эти ассоциации в сам код проекта. –

0

введите код в контроллер, если вы хотите перечислить темы для определенной страницы (Id), а затем поместите свой код в pagesController.rb, и если вы хотите установить связь со списком страниц, относящимся к определенной теме (id), тогда поставьте свой код в topicController.rb. и если у вас есть что-то другое, то спросите, пожалуйста, четко, чтобы я мог понять и ответить вам в соответствии с вашими потребностями.

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