Rails入门教程5.7 - 数据未在视图中显示

时间:2014-01-12 21:46:49

标签: ruby-on-rails ruby database

我正在尝试ruby on rails,通过“Getting started with Ruby”教程。我已经完成了步骤并包括5.7,到现在我应该可以创建一个新帖子并查看它,帖子已创建,但标题和文字没有显示。

1

控制器:posts_controller.rb

class PostsController < ApplicationController
def new
end

def create
  @post = Post.new(params[post_params])
  @post.save
  redirect_to @post
end
def show
    @post = Post.find(params[:id])
end
private
    def post_params
        params.require(:post).permit(:title, :text)
    end
end

创建帖子的视图

<h1>New Post</h1>

<%= form_for :post, url: posts_path do |f| %>
  <p>
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </p>
 
  <p>
    <%= f.label :text %><br>
    <%= f.text_area :text %>
  </p>
 
  <p>
    <%= f.submit %>
  </p>
<% end %>

显示帖子的节目视图。

<p>
  <strong>Title:</strong>
  <%= @post.title %>
</p>

<p>
  <strong>Text:</strong>
  <%= @post.text %>
</p>

我的猜测是问题是将数据传递到数据库,但我无法弄清楚什么是错误的。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

new控制器操作中,请务必将Post的新实例分配给实例变量:

# app/controllers/posts_controller.rb
def new
  @post = Post.new
end

然后,将@post实例变量传递给视图中的form_for帮助器:

# app/views/posts/new.html.erb
<%= form_for @post do |f| %>

form_for助手希望将资源传递给它;表单根据传递的资源类型自动提交到正确的路由。您在此实例中传递了一个新资源,因此表单将路由到资源的create操作。

答案 1 :(得分:1)

我发现这一行是问题

@post = Post.new(params[post_params])

应该是

@post = Post.new(post_params)

感谢所有回答的人!

答案 2 :(得分:0)

您可能希望将此帖子的标题更改为“数据未在视图中显示”。这是我要确定的:你实际上在数据库中创建了项目,我假设你使用的是sqlite。你可以在rails控制台中执行此操作。或者您可以在调用时直接输入表单或“创建帖子的视图”。 在我看来,你的控制器和你的视图中的显示动作是正确的 - 至少,他们应该显示你的数据。 即使没有表单工作,如果您通过rails console输入数据,您的数据仍应显示。