我开始学习Ruby on Rails。
我得到以下错误:ActiveModel::ForbiddenAttributesError in PostsController#create
以下是代码:
posts_controller.rb
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.create(params[:post]) // Its showing me error here
if @post.save
redirect_to posts_path notice: "Your Post was saved"
else
render "new"
end
end
end
new.html.erb
<h1> Add a New Post </h1>
<%= form_for @post do |f| %>
<p>
<%= f.label :title %><b/>
<%= f.text_field :title %><b/>
</p>
<p>
<%= f.label :content %><b/>
<%= f.text_area :content %><b/>
</p>
<%= f.submit "Add a New Post" %>
<% end %>
post.rb
class Post < ActiveRecord::Base
validates_presence_of :title, :content
end
请告诉我出了什么问题。顺便说一句,我使用Rails4
答案 0 :(得分:5)
在rails4中有强大的参数,因此您无法执行此操作:
@post = Post.create(params[:post])
你需要
@post = Post.create(post_params)
post_params
是控制器中的方法:
private
def post_params
params.require(:post).permit!
end
permit!
将允许任何事情。您可以将其限制为您想要允许的内容,例如params.require(:post).permit(:title, :content)
答案 1 :(得分:5)
你必须使用强大的params来解决这个问题。
文档:http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters
def post_params
params.require(:post).permit(:title, :content)
end
并在创建操作中使用:Post.create(post_params)
创建或更新记录时,您必须始终使用强参数。