簡體   English   中英

如何從單個模型/表中提取分組結果並提供給視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM