use*_*806 1 ruby ruby-on-rails ruby-on-rails-4
我已经开始学习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
Run Code Online (Sandbox Code Playgroud)
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 %>
Run Code Online (Sandbox Code Playgroud)
post.rb
class Post < ActiveRecord::Base
validates_presence_of :title, :content
end
Run Code Online (Sandbox Code Playgroud)
请告诉我出了什么问题.顺便说一句,我使用Rails4
在rails4中有强大的参数,所以你不能这样做:
@post = Post.create(params[:post])
Run Code Online (Sandbox Code Playgroud)
你需要
@post = Post.create(post_params)
Run Code Online (Sandbox Code Playgroud)
post_params控制器中的方法在哪里:
private
def post_params
params.require(:post).permit!
end
Run Code Online (Sandbox Code Playgroud)
permit!会允许任何事情.例如,您可以将其限制为您想要允许的内容params.require(:post).permit(:title, :content)
你必须使用强大的params来解决这个问题.
文档:http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters
def post_params
params.require(:post).permit(:title, :content)
end
Run Code Online (Sandbox Code Playgroud)
并在创建动作中使用: Post.create(post_params)
在创建或更新记录时,您必须始终使用强params.
| 归档时间: |
|
| 查看次数: |
2957 次 |
| 最近记录: |