HABTM与数组的关系

时间:2011-01-05 14:03:27

标签: ruby-on-rails arrays relationships

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

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

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

在参考书目方面,我希望有一个类似

的模型
create_table :bibliographies do |t|
  t.string :chapter
  t.text   :ref
  ...

其中ref实际上是对文章的引用数组,因此它将通过serialize ActiveRecord方法进行管理。

好的,现在问题是关于如何使数组@bibliography.ref的元素引用(在Ruby意义上)为几个article_id

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

提前致谢

2 个答案:

答案 0 :(得分:4)

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

(假设ref是一个id数组)

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

我会以不同的方式存储关系。使用article_id和bibliography_id字段添加第三个表/模型articles_bibliographies。然后,您可以使用内置于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

答案 1 :(得分:0)

根据egze的建议,我找到了解决问题的方法(不使用数组!)。 所以,我创建了一个has_many-through关系,但是因为我想保存订单 文章如何在参考书目,表格article_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")