2

我是 Rails 3 编程的初学者,我在创建正确的模型时遇到了一个问题。

假设有一个应用程序来管理一本书的书目,即管理参考文章列表中每一章的映射。所以对于文章部分,我可以有类似的东西:

create_table :articles do |t|
  t.string :title
  t.text   :content
  ...

在参考书目方面,我想要一个像

create_table :bibliographies do |t|
  t.string :chapter
  t.text   :ref
  ...

whereref实际上是对文章的引用数组,因此它将通过serializeActiveRecord 方法进行管理。

好的,所以现在的问题是如何使数组的元素成为@bibliography.ref几个article_id.

我如何为这种关系建模,我应该编写什么 Rails 3 代码来表达这种关系?让我感到困惑的是,@bibliography 的单个实例的单个字段会引用许多 @article.id 。

提前致谢

4

2 回答 2

4

如果你真的想存储这样的关系,那么我会在参考书目模型中定义一个方法,就像这样

(假设 ref 是一个 id 数组)

def articles
  Article.where(:id => self.ref)
end

我会以不同的方式存储关系。添加第三个表/模型articles_bibliographies 与article_id 和bibliography_id 字段。然后您可以使用内置于 ActiveRecord 中的 has_many :through 关联。

在您的参考书目课程中,您将拥有以下内容:

has_many :articles_bibliographies
has_many :articles, :through => :articles_bibliographies

那么你可以做@bibliography.articles

在此处阅读更多信息http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

于 2011-01-05T15:05:34.917 回答
0

按照 egze 的建议,我找到了解决问题的方法(不使用数组!)。所以,我创建了一个 has_many-through 关系,但是因为我想保存文章在参考书目中提到的顺序,所以表articles_bibliographies 也有一个 order_nr 字段,我在其中存储第一个、第二个等。参考书目中提到的文章:

create_table :articles_bibliographies do |t|
   t.references  :article
   t.references  :bibliography
   t.integer     :order_nr

这样我可以检索并显示一个有序的元素列表:

@bibliography.articles.order("order_nr ASC")
于 2011-01-09T20:58:41.097 回答