我是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 是(从红宝石意义上)引用了几个 article_id.

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

提前致谢

有帮助吗?

解决方案

如果您真的想存储这样的关系,那么我将在书目模型中定义一种方法,类似的东西

(假设REF是ID数组)

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

我会以不同的方式存储这种关系。添加第三个表/模型Articles_bibliographies使用Article_id和Bibliography_id字段。然后,您可以使用has_many:通过内置在ActivereCord中的关联。

在您的书目课上,您将有类似的东西:

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

然后,您可以做 @参考书目。

在这里阅读更多 http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

其他提示

遵循Egze的建议,我找到了一种解决问题的方法(不使用阵列!)。因此,我创建了一个has_many through的关系,但是由于我想保存文章的订单,因此在参考书目中提到了它们,table 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")
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top