我正在开展一个由学校,学生和文章组成的项目。当我开始开发我的文章控制器时,我意识到必须有更好的方法来实现我的目标,但我只是没有经验来弄明白。基本上我要做的是让我的用户注册到某所学校。然后,一旦用户登录,他应该能够看到他的学校和类别的所有文章。这是我的设置,任何建议将不胜感激:
school.rb:
class School < ActiveRecord::Base
has_many :users
has_many :articles, :through => :users
attr_accessible :name
end
user.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
category.rb:
class Category < ActiveRecord::Base
attr_accessible :name
has_many :articles
accepts_nested_attributes_for :articles
end
article.rb:
class Article < ActiveRecord::Base
attr_accessible :body
belongs_to :category
belongs_to :user
end
这看起来像是一个很好的设置来实现我的目标吗?谢谢你提前。
答案 0 :(得分:1)
accepts_nested_attributes_for :articles
感觉像是一个错误。除此之外,假设用户正在创建文章,那对我来说还不错。
我认为用户的文章需要考虑几个问题。如果用户......文章会发生什么?
也许出于这些原因,学校应该直接发表文章,而不是通过用户。但取决于你希望它如何工作。
您可能还想重新考虑与类别和文章的1对多关系。通常,它更容易使用标签系统,在工作和类别之间具有多对多关系。
想象一下,如果这篇文章是关于货运的风力回归。它可以属于国际商业和技术类别。
编写一些关于您希望类如何工作的测试,并指导您的设计细节。
答案 1 :(得分: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
从建模的角度来看,将文章直接链接到学校更有意义。目前,您的结构表明文章属于其用户目前所属的学校;虽然这通常可行,但从长远来看,这可能会让你最终付出代价。
鉴于这听起来像是用户浏览学校文章的主要活动之一,它也会使您的应用加载这些文章的过程变得复杂。根据您当前的结构,它将采取以下步骤:
将文章直接链接到学校会削减第二步,这将使您的表现自由增加,特别是如果您收到大量用户和文章。