PostsController中的ActiveModel :: ForbiddenAttributesError #create

时间:2015-02-19 12:27:08

标签: ruby-on-rails ruby 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

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

2 个答案:

答案 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)

创建或更新记录时,您必须始终使用强参数。