簡體   English   中英

遍歷Ruby on Rails中的視圖

[英]Iterating over views in Ruby on Rails

我是Ruby on Rails菜鳥。 我研究了Michael Hartl的Ruby on Rails 教程 到目前為止,我在關於靜態頁面的第3章中。 到目前為止,我的StaticPage控制器具有三個視圖: homehelpabout 控制器的布局如下所示:

<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Sample App</title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

我現在想做的是添加菜單欄,即所有靜態頁面的鏈接列表。 到目前為止,我在<body>標記中有這樣的內容:

<ul>
  <% '???'.each do |page| %>
    <li>Page!</li>
  <% end %>
</ul>

我不知道要放什么而不是'???' -我需要一個控制器所有視圖的迭代器。 提前致謝。

您所需要的不只是添加靜態頁面。 您將需要一個數據庫支持的model來存儲動態創建的頁面,並需要一個controller來處理model操作,從而使您能夠生成collections

使用collections您可以擁有類似

<ul>
  <% '???'.each do |page| %>
    <li><%= page %></li>
  <% end %>
</ul>

由於您正在使用該教程,因此呈現菜單欄所需要的是

<ul>
  <li><%= link_to "Home", home_path %></li>
  <li><%= link_to "Help", help_path %></li>
  <li><%= link_to "About", about_path %></li>
</ul>

您可以在控制器中的數據庫中呈現某些內容,並在視圖中使用它。 像在控制器中一樣,我可以在一個名為one的方法中編寫@ones = Something.all ,如果我在控制器中有一個show方法,該方法根據所使用的參數顯示數據庫中的一條記錄,則可以添加一個鏈接,如下所示:在下面,它將帶我到something_show_path/:something_id

<% @ones.each do |one|%>
    <%= link_to "#{one}", something_show_path(@one) %>
<% end %>

但是在這種情況下,數據庫中沒有靜態頁面的記錄。 因此,如果您想要在視圖中使用類似的語法,則將它們添加到控制器的數組中,例如

def whatever 
    ```rest of the code````
    @pages = ["home", "about", "help"]
end

在視圖中,您可以編寫

<ul>
    <% @pages.each do |p| %>
        <li><%= link_to("#{p}", :controller => 'static_page', :action => "#{p}") %></li>
    <% end %>
</ul>

編輯評論中的問題

class StaticPagesController < ApplicationController

   before_filter :load_pages, :only => [:about, :home, :help]

   ``` All your controller codes ```
    private
    def load_pages 
        @pages = ["load", "about", "help"]
    end
 end

這樣, :only列表中的所有方法都將在呈現頁面之前加載@pages。 您不必在每種方法中都加載它。 您可以在ApplicationController聲明一個方法,方法是像在此之前編寫私有方法一樣,先編寫一個私有方法,然后在任何控制器中使用before_filter對其進行調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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