Ruby on Rails创建的操作不起作用

时间:2016-09-01 01:04:25

标签: ruby-on-rails controller

我对Ruby很新。我正在尝试按照教程创建一个简单的发布应用程序。

我的创建操作不起作用。我尝试了这个,它似乎在终端中做了一些事情,但它并没有将它添加到我的Posts对象中。

这是我的帖子控制器:

class PostsController < ApplicationController
  def index 
    @posts = Post.all
  end

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

  def new
    @post = Post.new
  end

  def create 
    @post = Post.new(:title => params[:title], :content => params[:content])
    @post.save  
  end

  def edit 
  end

  def update
  end

  def destroy 
  end
end

这是我的新观点:

<h1>Add a New Post</h1>

<%= form_for @post do |f| %>
  <p>
    <%= f.label :title %>
    <%= f.text_field :title %>
  </p>
  <p>
    <%= f.label :content %>
    <%= f.text_area :content %>
  </p>
  <p>
    <%= f.submit "Add a New Post" %>
  </p>
<% end %>

当我尝试提交时,终端会出现这种情况:

Started POST "/posts" for ::1 at 2016-08-31 17:54:39 -0700
ActiveRecord::SchemaMigration Load (16.4ms)  SELECT "schema_migrations".* FROM         "schema_migrations"
Processing by PostsController#create as HTML
Parameters: {"utf8"=>"✓",   "authenticity_token"=>"tGpevHtpEoP5jHYqCn1G7tUKX9YWnx+PWkqlPzKadTCiIEX1UGs96mSCrDf  UIShKjp+ObwNA6G1nh3KE5gAIgw==", "post"=>{"title"=>"Jack's Post",  "content"=>"Please use this post"}, "commit"=>"Add a New Post"}
(0.1ms)  begin transaction
SQL (16.0ms)  INSERT INTO "posts" ("created_at", "updated_at") VALUES (?, ?)    [["created_at", 2016-09-01 00:54:40 UTC], ["updated_at", 2016-09-01 00:54:40 UTC]]
(14.7ms)  commit transaction
No template found for PostsController#create, rendering head :no_content
Completed 204 No Content in 114ms (ActiveRecord: 31.3ms)

我觉得我已经阅读了关于这一百万次堆栈溢出的帖子,似乎没有人能得到答案。任何帮助将非常感谢!

3 个答案:

答案 0 :(得分:1)

您应该使用强参数来从表单中获取所需的参数。

class PostsController < ApplicationController

  def create
    @post = Post.new(post_params)
    @post.save
  end

private

  def post_params
    params.require(:post).permit(:title, :content)
    # params.require(:post).permit! # Allow all
  end

end

如果您希望现有的解决方案能够正常工作,那么您需要在这样的参数前加上:

@post = Post.new(:title => params[:post][:title], :content => params[:post][:content])

如果检查日志,您会看到表单输入嵌套在post

"post"=>{"title"=>"Jack's Post",  "content"=>"Please use this post"}

答案 1 :(得分:0)

您已成功将记录插入数据库。接下来你想做什么?怎么样:

redirect_to action: 'index'

答案 2 :(得分:0)

当你查看日志时,它清楚地表明我没有查看。

No template found for PostsController#create, rendering head :no_content

因此,在PostsController#create操作中,我们需要重定向到任何操作,主要是我们重定向以显示操作。因此,您需要在create action中添加以下行。

# redirects user to show page of newly created post.
if @post.save
 redirect_to @post
else
 render 'new'
end  

去杀人浪潮:)。