配列とのHABTM関係
-
25-09-2019 - |
質問
私はRails 3プログラミングの初心者であり、適切なモデルの作成に1つの問題があります。
参照記事のリストの各章のマッピングを管理する本の参考文献を管理するためのアプリケーションがあるとしましょう。したがって、記事のパートについては、次のようなものを持つことができます。
create_table :articles do |t|
t.string :title
t.text :content
...
書誌面では、
create_table :bibliographies do |t|
t.string :chapter
t.text :ref
...
どこ ref
実際には記事への参照の配列なので、それは経由で管理されます serialize
ActiverCordメソッド。
さて、今、問題はアレイの要素を作る方法についてです @bibliography.ref
いくつかへの参照(ルビーの意味で)です article_id
.
そのような関係をモデル化するにはどうすればよいですか?また、それを表現するために書き込む必要がありますか?私を混乱させるのは、@Bibliographyの単一のインスタンスの単一のフィールドが多くの @article.idを参照するということです。
前もって感謝します
解決
あなたが本当にそのような関係を保存したいなら、私は参考文献モデルの方法を定義します、このようなもの
(そのrefがIDの配列であると仮定)
def articles
Article.where(:id => self.ref)
end
私は関係を異なって保存します。 article_idおよびBibliography_idフィールドを使用して、3番目のテーブル/モデル記事を追加します。次に、activerecordに組み込まれているhas_many:select ofsionを使用できます。
書誌クラスでは、次のようなものがあります。
has_many :articles_bibliographies
has_many :articles, :through => :articles_bibliographies
その後、 @Bibliography.articlesだけを行うことができます
詳細はこちらをご覧ください http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association
他のヒント
Egzeの提案に続いて、私は自分の問題を解決する方法を見つけました(配列を使用せずに!)。だから、私はhas_many-through関係を作成しますが、書誌で言及されている方法の記事の注文を保存したいので、テーブル記事_bibliographiesには、最初の2番目などを保存するOrder_nrフィールドもあります。書誌で言及されている記事:
create_table :articles_bibliographies do |t|
t.references :article
t.references :bibliography
t.integer :order_nr
このようにして、次のように順序付けられた要素リストを取得して表示できます。
@bibliography.articles.order("order_nr ASC")