0

3 つの列 ( 、、および) を使用するDocumentsテーブルを、カンマ区切りの ID の文字列が格納された 1 つの列 ( 、つまり) に変更しています。それはすべてうまくいっていますが、3つの列を読み取る関数を1つの列を読み取るように調整しようとしています.article1article2article3articles23,4,33,2

私が持っているモデルでは:

scope :all_articles, lambda {|p| where(:page => p) }

コントローラーにはこれがあります:

@articles = (1..3).to_a.map { |i| Article.all_articles(i).reverse }

そしてビューで:

<% @articles.each_with_index do |a, i| %>
  <%= a[i].name %>
<% end %>

この時点で、それは私を少し超えています。

乾杯!

4

1 に答える 1

1

通常、ID を列に格納することはお勧めできません。その関係を Has and Belongs to Many 関係に分割することをお勧めします。次のようにモデルに設定します。

class Document < ActiveRecord::Base
  #...
  has_and_belongs_to_many :articles
  #...
end

class Article < ActiveRecord::Base
  #... 
  has_and_belongs_to_many :documents
end

次に、ActiveRecord がリレーションシップを格納するために使用する結合テーブルを作成します。

create_table :articles_documents, :id => false do |t|
  t.integer :article_id
  t.integer :document_id
end

add_index :articles_documents, [:article_id, :document_id], unique: true

これにより、現在行っているよりもはるかに効率的にクエリを実行できます。たとえば、ある記事 ID を持つすべてのドキュメントを検索するには、次のようにします。あなたがするだろう:

@documents = Document.joins(:articles).where("articles.id = ?", some_article_id)

または、ドキュメントをクエリして記事を返したい場合は、次のようにします。

@documents = Document.includes(:articles).where(some_conditions)
于 2012-12-11T01:42:45.710 に答える