0

我正在研究一个由学校、学生和文章组成的项目。当我开始开发我的文章控制器时,我意识到必须有更好的方法来实现我的目标,但我只是没有经验来解决这个问题。基本上我想做的是让我的用户注册到某所学校。然后一旦用户登录,他应该能够看到他学校的所有文章和分类。这是我的设置,任何建议将不胜感激:

学校.rb:

class School < ActiveRecord::Base
  has_many :users
  has_many :articles, :through => :users
  attr_accessible :name
end

用户.rb:

class User < ActiveRecord::Base
  belongs_to :school
  has_many :articles
  attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :remember_me, :provider, :uid, :school_id
end

类别.rb:

class Category < ActiveRecord::Base
  attr_accessible :name
  has_many :articles
  accepts_nested_attributes_for :articles
end

文章.rb:

class Article < ActiveRecord::Base
  attr_accessible :body
  belongs_to :category
  belongs_to :user
end

这似乎是一个很好的设置来实现我的目标?先谢谢了。

4

2 回答 2

1

accepts_nested_attributes_for :articles感觉像是一个错误。除此之外,假设用户正在创建文章,这对我来说看起来不错。

我认为用户的文章需要考虑几个问题。如果用户...

  • 删除他/她的帐户
  • 转学
  • 完全毕业学校

也许出于这些原因,学校应该直接发布文章,而不是通过用户。但取决于您希望它如何工作。


您可能还想重新考虑与类别和文章的一对多关系。通常更容易使用在作品和类别之间具有多对多关系的标签系统。

想象一下,如果这篇文章是关于风力发电用于货运的回归。它可能属于国际商务和技术类别。


为您希望类如何工作编写一些测试,并让它指导您的设计细节。

于 2013-04-19T02:20:46.047 回答
1

虽然一切看起来都不错,但我建议将文章直接链接到学校和用户。所以你最终会得到类似的东西:

# school.rb
has_many :users
has_many :articles

# user.rb:
belongs_to :school
has_many :articles

# category.rb:
has_many :articles

# article.rb:
belongs_to :category
belongs_to :user
belongs_to :school

从建模的角度来看,将文章直接链接到学校更有意义。目前,您的结构表明一篇文章属于其用户当前所属的学校;虽然这通常可行,但从长远来看,这是一个额外的脆弱点,您最终可能会为此付出代价。

鉴于听起来主要活动之一是让用户浏览他们学校的文章,这也会使您的应用程序加载这些文章的过程变得复杂。使用您当前的结构,它将采取以下步骤:

  1. 查找当前用户的学校。
  2. 找到属于该学校的每个用户。
  3. 查找每个用户撰写的每篇文章。

将文章直接链接到学校将省去第二步,这将使您的性能免费提高,尤其是在您获得大量用户和文章的情况下。

于 2013-04-19T02:42:50.440 回答