Rails表数据显示为浏览器中实际表数据下的哈希

时间:2016-04-28 22:12:36

标签: ruby ruby-on-rails-4 web

我试图在索引页面上显示所有博客文章,但每当我转到它时,它会显示我想要的内容,然后在它下面,它将其余数据作为哈希值。我希望第一篇文章和第一篇描述在浏览器中,但我不希望它下面的哈希值存在。 Screenshot of how the data from the table shows up

这是我的posts_controller.rb

class PostsController < ApplicationController

  def index
    @post = Post.all
  end

  def show
    @post = Post.find(params[:id])
  end

  def new
    @post = Post.new(params[:id])
  end

  def create
    @post = Post.new(post_params)

    @post.save
    redirect_to @post
  end
end

private
def post_params
  params.require(:post).permit(:title, :description)
end

这是我的index.html.erb文件

<h1>Blog Posts</h1>

    <table>
      <th>Title</th>
      <th>Description</th>
      <div><%= @post.each do |post| %></div>
      <tr>
        <td><%= post.title %></td>
        <td><%= post.description %></td>
      </tr>
    </table>
    <% end %>

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

我相信你会发现这一行是你问题的根源:

<div><%= @post.each do |post| %></div>

ERB中的<%= %>标记用于输出评估结果。您只想处理使用<% %>标记的循环。

<% @post.each do |post| %>

请注意删除=符号以及<div>。您不需要<div>标记,因为不应该从迭代代码中输出任何内容。

此外,您的HTML 无效 - div无法成为table的直接子女。使用如下:

<table>
  <thead>
    <th>Title</th>
    <th>Description</th>
  </thead>
  <tbody>
    <% @post.each do |post| %>
      <tr>
        <td><%= post.title %></td>
        <td><%= post.description %></td>
      </tr>
    <% end %>
  </tbody>
</table>