开发者

Setting up a Has_Many :through Association

开发者 https://www.devze.com 2023-03-01 22:29 出处:网络
On the application I\'m currently working on, I\'m stuck on setting up the associations between 3 models to ensure referential integrity. I have an Event model, Building model, and a Room model. The a

On the application I'm currently working on, I'm stuck on setting up the associations between 3 models to ensure referential integrity. I have an Event model, Building model, and a Room model. The association in real life is pretty intuitive. An Event can only be in one Building and one Room. A Building clearly can have multiple rooms.

Here's what I have set up now. However, how can Events specify their room if they belong to Buildings, and the foreign key for the Room is in the Events table? Is this where you use a has_many :through relationship? Is it good practice to store both the Building and Room foreign keys in the Event table, as Rooms are owned by Buildings? What about the conditional relationship that requires a building to be specified before allowing a room to be specified (some buildings have 2 rooms, others have 20, for example)

Sorry I'm so unclear on this. Thanks in advance for the help!

    class Event < ActiveRecord::Base
开发者_运维技巧    belongs_to :building

    end

    class Building < ActiveRecord::Base
    has_many :events
    has_many :rooms

    end

    class Room < ActiveRecord::Base
    belongs_to :building

    end


I think the best way to handle this is to do something like the following:

class Event < ActiveRecord::Base
 belongs_to :room
 has_one :building, :through => :room
end

class Building < ActiveRecord::Base
 has_many :events
 has_many :rooms
end

class Room < ActiveRecord::Base
 belongs_to :building
end

So you can use has_one :through to specify that an event owns a hotel


I would recommend the following:

class Event < ActiveRecord::Base
 belongs_to :room
 has_one :building, through: :room
end

class Building < ActiveRecord::Base
 has_many :events, through: :rooms
 has_many :rooms
end

class Room < ActiveRecord::Base
 belongs_to :building
 has_many :events
end

This way you can do @room.events, @event.building, @building.events

0

精彩评论

暂无评论...
验证码 换一张
取 消