[英]How to extract grouped results from single model/table and provide to the view
我有一個名為Language
的模型,只有兩列:language和link,並且希望能夠遍歷每種語言的每個鏈接並在視圖中顯示。 即(顯然這不是代碼,只是為了說明所需的模式)
Language 1
Link 1
Link 2
Link 3
Language 2
Link 1
Language 3
Link 1
Link 2
Language 4
etc
提取這些數據然后在視圖中呈現的“軌道方式”是什么? (注意:如果數據位於兩個不同的模型中,我會很容易做到這一點,但事實並非如此)
因此,一種Railsy的方式是在您的控制器中使用以下代碼:
@languages = Language.all.group_by(&:language)
這將為您提供按(erm ...)語言的語言分組的語言哈希(<-也許將列重命名為name
以避免這種歧義?):
# { 'English' => [language_1, language_2, etc...],
# 'French' => [language_3, language_4],
# etc... }
然后您認為:
<% @languages.each do |language_name, languages| %>
<h1>
<%= language_name %>
</h1>
<% languages.each do |language| %>
<p>
<%= language.link %>
</p>
<% end %>
<% end %>
顯然,HTML標記可以是您想要的任何標記,盡管我希望可以舉一個有用的例子。
但是,這里有一個警告-隨着數據庫的增長,這可能無法證明是一種有效的工作方式。 您最好為鏈接建立一個單獨的模型,並在語言和鏈接之間建立一對多的關系。
例如:
# langage.rb
has_many :links
# link.rb
belongs_to :language
# your controller
@languages = Language.includes(:links)
然后在視圖中顯示以下內容:
<% @languages.each do |language| %>
<h1>
<%= language.language %>
</h1>
<% language.links.each do |link| %>
<p>
<%= link.url %>
</p>
<% end %>
<% end %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.