每当我尝试保存帖子时,都会显示此错误。
这是我的new.html.erb
文件。
<div id="page_wrapper">
<h1>New Post</h1>
<%= form_for :post, url: posts_path do |f| %>
<% if @post.errors.any? %>
<div id="errors">
<h2><%= pluralize(@post.errors.count, "error") %> prevented this post from saving:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %><br>
</p>
<p>
<%= f.label :date %><br>
<%= f.text_field :date %><br>
</p>
<p>
<%= f.label :time %><br>
<%= f.text_field :time %><br>
</p>
<p>
<%= f.label :location %><br>
<%= f.text_field :location %><br>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
</div>
这是我的show.html.erb
文件。
<div id="page_wrapper">
<h1 class="title">
<%= @post.title %>
</h1>
<p class="date">
Submitted <%= time_ago_in_words(@post.created_at) %> Ago
</p>
<p class="time">
<%= @post.time %>
</p>
<p class="location">
<%= @post.location %>
</p>
</div>
这是我的posts_controller.rb
文件。
class PostsController < ApplicationController
def index
@posts = Post.all.order('created_at DESC')
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :body, :location)
end
end
她的routes.rb
档案
Rails.application.routes.draw do
resources :posts
root "posts#index"
end
答案 0 :(得分:2)
您已在body
中添加了post.rb
的验证。但是,您的body
表中没有字段posts
。
因此,当调用@post.create
时,post.rb
中定义的所有验证都会运行,因为您没有body
字段,所以您获得了{{1}错误。
要解决此问题,请移除Undefined method 'body' for Post
body
的验证
删除以下行
post.rb
你应该好好去。
答案 1 :(得分:0)
params.require(:post).permit(:title, :body, :location)
您需要:body
,但在表单中您有title, date, time and location
。
删除它,并确保你的强属参数中有这个属性:
params.require(:post).permit(:title, :date, :time, :location)