PostsController中的ActiveModel :: ForbiddenAttributesError #create

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

j-d*_*exx 5

在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)


Ale*_*rra 5

你必须使用强大的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.