我对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)
我觉得我已经阅读了关于这一百万次堆栈溢出的帖子,似乎没有人能得到答案。任何帮助将非常感谢!
答案 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
去杀人浪潮:)。