我正在修改Documents
表,使用三列(article1
,article2
和article3
)到一个(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 %>
此时此刻有点超出我的范围。
干杯!
答案 0 :(得分: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)