TasksController #create中的ActiveModel :: ForbiddenAttributesError

时间:2014-10-16 02:52:32

标签: ruby-on-rails

我今天开始学习Ruby on Rails,但我收到了这个错误:

在TasksController #create中创建ActiveModel :: ForbiddenAttributesError

错误消息显示错误已打开' Task.create params [:task]'

def create
    Task.create params[:task]
    redirect_to :back
  end

控制器:

class TasksController < ApplicationController


def index
    @tasks = Task.all
  end

  def create
    Task.create params[:task]
    redirect_to :back
  end

end

指数:

    <h1>Task</h1>
<%= form_for Task.new do|f| %>
   <%= f.label :task %>
   <%= f.text_field :task %>
   <%= f.submit %>
 <% end %>
<ul>
    <% for task in @tasks %>
    <li><%= task.task %></li>
    <% end %>
</ul>

2 个答案:

答案 0 :(得分:1)

我也遇到了这个问题。替换以下行: params.require(:任务).permit(:任务)

class TasksController < ApplicationController

  def index
    @tasks = Task.all
  end

  def create
    Task.create task_params
    redirect_to :back
  end

  private

  def task_params
    params.require(:task).permit(:task)
  end

end

答案 1 :(得分:0)

这是一个由强大的参数解决的问题。我不会给你一个关于强大的障碍的教训,它已被谈到死亡,但基本上你需要告诉你的控制器允许某些参数。 rails guides奇妙地解释了它:

  

4.5强参数使用强参数时,禁止在活动模型批量分配中使用动作控制器参数   直到他们被列入白名单。这意味着你必须做一个   有意识地选择允许批量更新的属性和   从而防止意外暴露不应暴露的东西。

那就是说,我不知道你所有的Task属性,但它看起来像这样:

class TasksController < ApplicationController


def index
    @tasks = Task.all
  end

  def create
    Task.create task_params
    redirect_to :back
  end

  private

  def task_params
    params.require(:task).permit(:name, :title, :body, :otherstuff)
  end

end