代码之家  ›  专栏  ›  技术社区  ›  S.BM

使用Ruby在视图中渲染数组

  •  2
  • S.BM  · 技术社区  · 7 年前

    我是Ruby新手,我尝试在一个名为database的单独文件中呈现一个数组。rb:

    Data = [
      {
        title: "First",
        content: "Lorem ipsum...",
        photo: "image1"
      },
      {
        title: "Second",
        content: "Eventually ...",
        photo: "image2"
      },
      {
        title: "Third",
        content: "also to Kim’s ....",
       photo: "image3"
      }
    ]
    

    现在,我想在视图中渲染此阵列。

    在我的应用程序中。rb我有以下代码:

    require "sinatra"
    require "sinatra/activerecord"
    
    require_relative "database"
    
    ["/", "/articles"].each do |path|
      get path do
          @database = Data
        erb :index
      end
    end
    

    在我的视图索引中:

    <% @database.each do |article| %>
    
        <!-- Blog Post -->
        <div class="card mb-4">
          <img class="card-img-top" src="<%= article.photo %>" alt="">
          <div class="card-body">
            <h2 class="card-title oink"><%= article.title %></h2>
            <p class="card-text oink"><%= article.content %></p>
          </div>
          <div class="card-footer text-muted">
          </div>
        </div>
    
      <% end %>
    

    如何让它工作?因为似乎无法识别属性标题、内容和照片。 我该怎么办?创建模型?但是怎么做呢?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Ursus    7 年前

    数组由哈希项组成。如果您想坚持使用哈希,这是访问值的方法(通过键)

    <!-- Blog Post -->
    <div class="card mb-4">
      <img class="card-img-top" src="<%= article[:photo] %>" alt="">
      <div class="card-body">
        <h2 class="card-title oink"><%= article[:title] %></h2>
        <p class="card-text oink"><%= article[:content] %></p>
      </div>
      <div class="card-footer text-muted">
      </div>
    </div>
    

    否则,如果您想拥有方法,可以使用Ruby Struct

    Article = Struct.new(:title, :content, :photo)
    
    Data = [
      Article.new("First", "Lorem ipsum...", "image1"),
      Article.new("Second", "Eventually ...", "image2"),
      Article.new("Third", "also to Kim’s ....", "image3")
    ]
    

    现在,您可以像在代码片段中一样执行此操作