2013-05-03 3 views
0

Всего новичков в Rails и программирования в целом, поэтому, пожалуйста, простите меня, если ответ на мой вопрос кажется явным. Я делал много чтения, включая the ROR guides, но не могу найти сценарий, специфичный для следующей ситуации:Rails Полиморфные ассоциации

Я три модели scaffolded под одной User модели, и я пытаюсь связать их следующим образом:

class User < ActiveRecord::Base 
    has_many :malls, :dependent => :destroy 
end 

class Mall < ActiveRecord::Base 
    belongs_to :user 
    has_many :stores, :dependent => :destroy 
    has_many :cakes, :as => :cake_poly, :dependent => :destroy 
end 

class Store < ActiveRecord::Base 
    belongs_to :mall 
    has_many :cakes, :as => :cake_poly, :dependent => :destroy 
end 

class Cakes < ActiveRecord::Base 
    belongs_to :cake_poly, :polymorphic => true 
end 

Будет ли это работать? Если это так, есть ли лучший способ реализовать это? Если нет, то как еще я могу реализовать ассоциации?

Идея заключается в том, что каждый User может иметь много malls, каждый Mall может иметь много stores и как malls и stores может иметь много cakes.

+2

* «Будет ли это работать?» * - Вы должны попробовать сами. – Stefan

+0

Я пробовал, возможно, мой вопрос должен был быть: «это лучший способ реализовать ассоциацию?» –

+0

Как вы уже разместили, этот код не должен работать: ': cake_poly' в' Cake' не совпадают ': cake_polymorphic' в' Store' и 'Mall'. Вы должны проверить код и изменить свой вопрос соответственно. – toro2k

ответ

0

Ключевым вопросом для вашего дизайна является намерение - чего вы хотите достичь?

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

class Mall < ActiveRecord::Base 
    has_many :stores 
    has_many :cakes, :through => :stores 
end 

Полиморфного подход является идеальным выбором, если два комплекта (торты в торговом центре, торты в магазинах молла) не коррелируют.

+0

Спасибо за ответ. Это точно мое намерение, торты и торты в магазине похожи (поэтому одна модель), но отдельные сущности. Но по мере того, как я углубляюсь во весь процесс, я думаю, что сейчас я откажусь от полиморфизма и просто создаю еще одну модель. Подробности, изложенные выше. –

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