我是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。
提前致谢
答案 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")