0

大局:我正在创建一个应用程序来跟踪历史上的时间事件。我用四个主要模型设置它:用户、事件、故事和图像。这个想法是任何给定的用户都可以创建一个事件,并将故事和/或图像添加到他自己的事件或任何其他事件中。但是故事和图像总是附加到某个事件,并且任何其他模型都属于创建它的用户(用于过滤和编辑目的)

协会的一般结构是这样的:

class User < ActiveRecord::Base
  has_many :events
  has_many :stories
  has_many :images
end

class Event < ActiveRecord::Base
  belongs_to :user
  has_many :stories
  has_many :images
end

class Story < ActiveRecord::Base
  belongs_to :user
  belongs_to :event
end

class Image < ActiveRecord::Base
  belongs_to :user
  belongs_to :event
end

我是 Rails 的新手,我几乎无法控制更复杂的关联,例如 many_to_many,通过:或:

我的问题是,这组关联是最优的,还是可以通过以不同的方式组合它们来改进?

4

2 回答 2

2

你在正确的轨道上,但storyimage应该属于user. 你在那里创造了冗余。

class User < ActiveRecord::Base
  has_many :events
  has_many :stories, :through => :events
  has_many :images, :through => :events
end

class Event < ActiveRecord::Base
  belongs_to :user
  has_many :stories
  has_many :images
end

class Story < ActiveRecord::Base
  belongs_to :event
end

class Image < ActiveRecord::Base
  belongs_to :event
end

这样你仍然可以写user.storiesuser.images.

于 2013-09-06T01:22:39.640 回答
1

尝试使用嵌套属性:

http://railscasts.com/episodes/196-nested-model-form-part-1

示例代码:

class User < ActiveRecord::Base
  has_many :events
  accepts_nested_attributes_for :events
end

class Event < ActiveRecord::Base
  belongs_to :user
  has_many :stories
  has_many :images
  accepts_nested_attributes_for :stories, :images
end

class Story < ActiveRecord::Base
  belongs_to :event
end

class Image < ActiveRecord::Base
  belongs_to :event
end

嵌套属性接受许多级别。在这种情况下,有 3 个级别

  1. 用户

  2. 事件

  3. 故事和形象。

它就像在3 级(调查 - 问题 - 答案)铸造的轨道上的样本。

查看上面的链接并观看第2 部分以了解它是如何工作的。

或者您无法查看我的示例,但它适用于 2 个级别(主题 - 任务)。

链接在这里

使用帐号登录:duyet.vn@gmail.com/12341234

于 2016-11-30T05:57:23.943 回答