2012-06-14 7 views
1

Я ищу, чтобы создать приложение, которое позволит мне связать несколько изображений профиля с несколькими объявлениями.Лучший способ связать профили с несколькими баннерами

Я считаю, что это будет ассоциация has_and_belongs_to_many, так как я хочу, чтобы объявление имело несколько профилей и профилей, принадлежащих нескольким объявлениям. Однако я немного смущен, как это будет работать с моими таблицами базы данных.

Если объявление имеет одну строку в моей таблице объявлений, то как это будет связывать несколько изображений профиля (хранящихся в моей таблице профилей) в одной ячейке profile_id? Нужно ли настраивать отдельную третью модель и таблицу базы данных для обработки связанных с ними?

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

resources :ads 
resources :profiles 

Извините за основной вопрос, но я могу Кажется, что я не нашел никакой информации, которая помогает моей проблеме, а руководство по направляющим для ассоциаций HABTM довольно короткое.

Заранее благодарим за любую помощь, которую вы можете предложить! :)

ответ

1

Вам не нужны вложенные ресурсы, чтобы «работать». Вам нужна другая таблица, которая соединяет ваши модели вместе с именем ads_profiles (множественное число и в алфавитном порядке по соглашению). Таблица содержит два столбца (ad_id и profile_id). С рекламным объектом вы можете получить профили (ad.profiles) и профиль получить объявления (profile.ads).

Это поможет вам начать работу: http://guides.rubyonrails.org/association_basics.html

~ Чарльз ~

1

Когда вы создаете ассоциацию HABTM, вам необходимо вручную создать таблицу ассоциаций. В вашем случае есть ads_profiles.

rails g migration create_table_ads_profiles 

В этой таблице будут указаны ad_id и profile_id, где теперь можно иметь несколько связанных записей. более Один Гоча, о миграции, не забудьте добавить: идентификатор => ложно ему

class CreateTableAdsProfiles < ActiveRecord::Migration 
    def change 
    create_table :ads_profiles, :id => false do |t| 
     t.integer :ad_id 
     t.integer :profile_id 
    end 
    end 
end 

Если у вас есть дополнительные вопросы, смело спросить.

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