0

我正在将一个Documents表从使用三列(article1、、article2article3)修改为一列(),articles其中存储了一串以逗号分隔的 ID(即,23,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 和 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 回答